C的复习2

来源:互联网 发布:阿里云学生认证骗局 编辑:程序博客网 时间:2024/05/21 14:58

关于编译器默认字节对齐长度的改变的做法~~

#pragma pack(push)//将初始的字节对齐数压栈

#pragma pack(N)//N是你要改变成的字节个数

...

...

你的结构体和类~~

...

#pragma pack(pop)//恢复初始

..

..

关于在C中定义自己的动态数组~~

 

 

结构体中如果有可变长数组~~~

对其进行操作的正确方式是声明一个结构体指针~~给这个指针动态分配足够的空间~~

再对其进行操作~~

但是直接。。。比如

struct A{

   int p;   

   int x[];

   

}

main()

{

   struct A a;

   a.x[0]=...;

   a.x[1]=...;

  

}

这样访问是非法的~~~不同编译器给可变长数组预留的空间是不同的~~

如果a.p=3;我接下来进行a.x[2]=5的操作~~~这样很可能就把a.p的值修改了~~~

所以遇到可变长数组~~一定要对其进行初始化~~~!!切记~~
正确的方法是

struct A *a=(struct A*)malloc(sizeof(struct A)*N);

a->x[m]=...

..

free(a);

 

原创粉丝点击