手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

C 基础知识

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

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[]的内容有三个不是我需要的内容。

其实,内容图示如下:

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!