2.
printf("%%%%\n"); 输出结果是 %%
3.
4.
-为左对齐
2.存储方式
此题涉及到大小端:
大端(字节序)低位在高地址,高位在低地址;
小端(字节序)低位在低地址,高位在高地址;
五、const修饰指针变量
做这个题目之前,我们先回顾一下:
所以:const在*前面,就是修饰的指针变量所指向的值不能改变,叫常量指针
const在*后面,修饰的指针变量不能改变(即内存地址不能改变),就叫指针常量
所以选D,A选项是都不可以改变
六、与字符串有关的
strcpy(源地址,目的地址),把目的地址字符串拷贝到源地址;
strcat(源地址,目的地址),把目的地址字符串追加到源地址;
p2+1->"BCD";p1+2->"cd";str+2->"z";
strcpy(str2+2,strcat(p1+2,p2+1));-> "xycdBCD"
选D
a数组的元素类型都是char*,p是二级指针,a作为数组名,是首元素的地址(char**),所以将a赋值给p;
调用函数,m也指向数组a的首元素,++m从第一个元素到了第二个元素"afternoon",输出afternoon
七、求结构体的内存大小(内存对齐)
先看内存对齐规则:
结构体内存对齐规则
1. 第一个成员在与结构体偏移量为 0 的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
VS 中默认的对齐数为 8
3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
以此类比,答案为C
位段:就是在结构体成员后面加了一个冒号和一个数字,数字代表:分配了几个比特位
位段意义在于节省空间
位段成员的类型必须指定为unsigned或int类型。
同类型可以共用,但是不同类型需要重新开辟空间
unsigned:开辟4个字节,32位,a和b占用(19+11=30)此时开辟的空间只剩2个比特位;重新开辟四个字节,c占4个比特位,d占29个,加起来超过32,所以还需要再开辟
重新开辟4个字节
此时char属于另一种类型,需要独自开辟一字节
共13字节,但需要对齐,类型中最大的整数倍:16
八、功能型(观察)
首先我们看到这么大的数,先用小的数来观察这段代码的功能:
所以我们只需要观察9999的二进制中有多少1就可以:
9999转化二进制:1111100111 ;count=8
总结
很多细小的问题我们得注意,回看慢慢进步!我们下期不见不散