C 基础知识

2008-02-23 05:33:33来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

C++的知识很多,有四库全书《C 程式设计》,《C Primer,这本文章只想谈谈我个人所看到的用到的知识。加上自己的理解。很多东西可能没有系统化,而且,知识也是想到那写到那。

首先谈谈 类的对象的大小,

class A

{

};

main()

{

A a;

cout<<sizeof(a)<<endl;

}

他的结果会是多少呢?

答案为1

为什么?他没有定义任何变量,按道理,应该为0的啊。这是为了确保每一个对象的内存地址都是唯一的。比如:

A ab

假如,长度为0,那么,ab的内存地址,就可能是个,这样,会产生一些不必要的麻烦。

那么

class A

{

char m;

};

main()

{

A a;

cout<<sizeof(a)<<endl;

}

会打印结果为多少啊。

答案为4

这个问题叫Alignment,有一次,我就碰到这样郁闷的问题,我们的工程中代码都是用数组传送数据,比如坐标 xy,那么就这样赋值

*(int *)&w[0]=x;

*(int *)&w[4]=y;

(或许大家很少用),这样的代码有一个缺点,送数据,取数据十分不方便,而且,由于有下标,因此,代码不好利用循环结构(更有不是四位的数据) 。只能一位一位的赋值,更有一个问题,就是,当工程一个约定变了的时候,任何的代码都要改变。不好reuse

因此,我希望借助结构strcut,或class来改造程式代码,但是就碰到数据对齐问题。

比如,我定义一个结构

struct A

{

char type;

int y;

};

然后,这样使用。

char buf[MAX];

A a;

memcpy(buf,&a,sizeof(a));

但是,却发现buf[]的内容有三个不是我需要的内容。

其实,内容图示如下:

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: c/c 中结构体(struct)知识点强化,链表的学习

下一篇: 关于C/C 的小知识点