代码的规划与规范化
早上在写代码时,为了测试不同数据类型的大小和指针的大小:
1 #include <stdio.h> 2 3 typedef struct info{ 4 char a; 5 char b; 6 char g; 7 char e; 8 int d; 9 int f; 10 int c; 11 }Info; 12 13 int main(int argc, char **argv) 14 { 15 int iVar = 20; 16 long lVar = 26565; 17 char ch = 'a'; 18 double dVar = 3.1415926535897932; 19 Info sInfo; 20 21 int *ptriVar = &iVar; 22 long *ptrlVar = &lVar; 23 char *ptrch = &ch; 24 double *ptrdVar = &dVar; 25 Info *ptrsInfo = &sInfo; 26 27 printf("The size iVar %d, lVar %d, ch %d, dVar %d, sInfo %d\n", sizeof(iVar), sizeof(lVar), sizeof(ch), sizeof(dVar), sizeof(sInfo)); 28 printf("The size ptriVar %d, ptrlVar %d, ptrch %d, ptrdVar %d, ptrsInfo %d\n", sizeof(ptriVar), sizeof(ptrlVar), sizeof(ptrch), sizeof(ptrdVar), sizeof(ptrsInfo)); 29 printf("The address ptriVar %p, ptrlVar %p, ptrch %p, ptrdVar %p, ptrsInfo %p\n", &ptriVar, &ptrlVar, &ptrch, &ptrdVar, &ptrsInfo); 30 printf("The value ptriVar %p, ptrlVar %p, ptrch %p, ptrdVar %p, ptrsInfo %p\n", ptriVar, ptrlVar, ptrch, ptrdVar, ptrsInfo); 31 32 return 0; 33 }
结果如下:
The size iVar 4, lVar 8, ch 1, dVar 8, sInfo 16
The size ptriVar 8, ptrlVar 8, ptrch 8, ptrdVar 8, ptrsInfo 8
The address ptriVar 0x7ffdca27f2f8, ptrlVar 0x7ffdca27f2f0, ptrch 0x7ffdca27f2e8, ptrdVar 0x7ffdca27f2e0, ptrsInfo 0x7ffdca27f2d8
The value ptriVar 0x7ffdca27f32c, ptrlVar 0x7ffdca27f320, ptrch 0x7ffdca27f31f, ptrdVar 0x7ffdca27f310, ptrsInfo 0x7ffdca27f300
若代码修改如下:
1 #include <stdio.h> 2 3 typedef struct info{ 4 char a; 5 int c; 6 char b; 7 int d; 8 char e; 9 int f; 10 char g; 11 }Info; 12 13 int main(int argc, char **argv) 14 { 15 int iVar = 20; 16 long lVar = 26565; 17 char ch = 'a'; 18 double dVar = 3.1415926535897932; 19 Info sInfo; 20 21 int *ptriVar = &iVar; 22 long *ptrlVar = &lVar; 23 char *ptrch = &ch; 24 double *ptrdVar = &dVar; 25 Info *ptrsInfo = &sInfo; 26 27 printf("The size iVar %d, lVar %d, ch %d, dVar %d, sInfo %d\n", sizeof(iVar), sizeof(lVar), sizeof(ch), sizeof(dVar), sizeof(sInfo)); 28 printf("The size ptriVar %d, ptrlVar %d, ptrch %d, ptrdVar %d, ptrsInfo %d\n", sizeof(ptriVar), sizeof(ptrlVar), sizeof(ptrch), sizeof(ptrdVar), sizeof(ptrsInfo)); 29 printf("The address ptriVar %p, ptrlVar %p, ptrch %p, ptrdVar %p, ptrsInfo %p\n", &ptriVar, &ptrlVar, &ptrch, &ptrdVar, &ptrsInfo); 30 printf("The value ptriVar %p, ptrlVar %p, ptrch %p, ptrdVar %p, ptrsInfo %p\n", ptriVar, ptrlVar, ptrch, ptrdVar, ptrsInfo); 31 32 return 0; 33 }
代码只是调整了下顺序,看结果:
The size iVar 4, lVar 8, ch 1, dVar 8, sInfo 28
The size ptriVar 8, ptrlVar 8, ptrch 8, ptrdVar 8, ptrsInfo 8
The address ptriVar 0x7ffe514d7ba8, ptrlVar 0x7ffe514d7ba0, ptrch 0x7ffe514d7b98, ptrdVar 0x7ffe514d7b90, ptrsInfo 0x7ffe514d7b88
The value ptriVar 0x7ffe514d7bec, ptrlVar 0x7ffe514d7be0, ptrch 0x7ffe514d7bdf, ptrdVar 0x7ffe514d7bd0, ptrsInfo 0x7ffe514d7bb0
可以看到,仅仅是在定义结构体时的顺序不同,结构体的大小就有这么大差距,原因是C语言中会自动对结构体予以空间填充,因此要合理利用这一点。代码的规范和规划是必要的。
http://blog.csdn.net/stephenxu111/article/details/2458152
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具