C语言小知识点0

今天学习C语言发现了以前的一些知识上的盲点,就记录下来。

printf("%d,%d\n", sizeof('A'), sizeof("A"));

这个代码打印的结果是 4,2

我去查了下资料这个'A'是integer character constant类型,其实就是我们自己所获得的ascii码。在三十二位的windows系统里int是4个字节所以打印的4,这里这个当成了int类型。

2是因为双引号会认为是字符串,所以在其后系统自动添加了'\0',所以其实是两个字符。

typedef struct strtype3 {
    char a;
    int b;
} X3;
X3 a = { 1 ,'A' };
printf("%d\n", &a);
printf("%d,%d\n", &a.a, &a.b);
//打印结果
14810844
14810844,14810848

这里可以看出属性a和属性b是相差了4个字节,但是a是char类型的明明是一个字节。

原来c语言有一个边界对齐的特点,就是这个属性的地址必须是4的倍数。所以这样就会有三个字节的地址空缺出来。

但是连续两个char类型的属性,这样就会有两个字节的地址空缺出来。

所以c语言结构体的属性最好可以合理安排,这样可以节省很多内存出来。

猜你喜欢

转载自www.cnblogs.com/ZhanKing/p/10253330.html