笔记
Temet_nosce
这个作者很懒,什么都没留下…
展开
-
c语言结构体中含有柔性数组字节对齐问题。
struct test { char a; int b[]; }; int main() { struct test c; struct test* ps = (struct test*)malloc(sizeof(struct test) + 5 * sizeof(int)); printf("%d\n", sizeof(c)); int i = 0; for (i = 0; i < 5; i++) { ps->b[i] = i; } return 0; } 程序运行原创 2021-08-29 21:57:04 · 439 阅读 · 0 评论 -
c语言嵌套结构体内存对齐
结构体内存对齐规则: 1.第一个成员在结构体变量偏移量为0 的地址处。 2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数 = 编译器默认的一个对齐数与该成员大小中的较小值。vs中默认值是8 Linux默认值为4(也有说法说linux中没有默认). 3.结构体总大小为最大对齐数的整数倍。(每个成员变量都有自己的对齐数) 4.如果嵌套结构体,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(包含嵌套结构体的对齐数)的整数倍。 struct S3 { doubl原创 2021-08-22 21:04:32 · 1965 阅读 · 0 评论 -
c语言关于宏定义的随手记
#define max(a,b){(a)>(b)?a:b} int main(){ int a=5; int b=0; int c=max(++a,b)//(++a)>(b)?(++a):b如果是a大于b则执行两次++a. Int d=max(++a,b+10)//和上一行一样,但是这里b大后一次的++a不执行。 } 输出结果,8 0 7 10原创 2021-08-17 10:30:20 · 121 阅读 · 0 评论