设为首页 加入收藏

TOP

C/C+语言struct深层探索(二)
2014-11-23 22:08:29 来源: 作者: 【 】 浏览:4
Tags:C/C 语言 struct 深层 探索
题进行全面的解答。

  程序中第2行#pragma pack (8)虽然指定了对界为8,但是由于struct example1中的成员最大size为4(long变量size为4),故struct example1仍然按4字节对界,struct example1的size为8,即第18行的输出结果;

  struct example2中包含了struct example1,其本身包含的简单数据成员的最大size为2(short变量e),但是因为其包含了struct example1,而struct example1中的最大成员size为4,struct example2也应以4对界,#pragma pack (8)中指定的对界对struct example2也不起作用,故19行的输出结果为16;

  由于struct example2中的成员以4为单位对界,故其char变量c后应补充3个空,其后才是成员struct1的内存空间,20行的输出结果为4。


3. C和C++间struct的深层区别
  在C++语言中struct具有了“类” 的功能,其与关键字class的区别在于struct中成员变量和函数的默认访问权限为public,而class的为private。

  例如,定义struct类和class类:

struct structA
{
char a;

}
class classB
{
char a;

}

  则:

struct A a;
a.a = a; //访问public成员,合法
classB b;
b.a = a; //访问private成员,不合法

  许多文献写到这里就认为已经给出了C++中struct和class的全部区别,实则不然,另外一点需要注意的是:

  C++中的struct保持了对C中struct的全面兼容(这符合C++的初衷――“a better c”),因而,下面的操作是合法的:

//定义struct
struct structA
{
char a;
char b;
int c;
};
structA a = {a , a ,1}; // 定义时直接赋初值

  即struct可以在定义的时候直接以{ }对其成员变量赋初值,而class则不能,在经典书目《thinking C++ 2nd edition》中作者对此点进行了强调。



4. struct编程注意事项
  看看下面的程序:

1. #include

2. struct structA
3. {
4. int iMember;
5. char *cMember;
6. };

7. int main(int argc, char* argv[])
8. {
9. structA instant1,instant2;
10.char c = a;

11. instant1.iMember =

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Windows下C语言网络编程快速入门 下一篇Mongodb源码分析--Replication之..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: