
当A=2, B=3时,pointer分配( )个字节的空间。 A.20 B.15 C.11 D.9
要想仔细理解此题目,就要提及位段这个概念。 位段是一种特殊的结构体或联合体成员。

位段成员后面所跟的数字是成员所占的大小,以1字节为单位,当成员所占字节满1字节或超过1字节时,将自动使用下一个字节;在这里4+2为6,由于下一个成员所用大小未知,所以下一成员将自己使用1个字节;最后一个成员使用1个字节;
所以该位段占了3个字节;在计算大小时sizeof中所计算的是: 3*2+3:该结果算出来的大小是9 答案显然是: D
而在我第一次做这道题时,我默认将2+3看作了一个整体,得出了15的结论。 因此define是一个大坑。

A.> B.< C.不输出 D.程序有问题
要想理清这道题目,首先要知道sizeof()的作用,及其所返回的值; 在进行比较时,由于 sizeof 运算符的结果是 size_t 类型(无符号整数类型),而 i 是 int 类型(有符号整数类型)。 当有符号整数和无符号整数进行比较时,有符号整数会被隐式转换为无符号整数。
错误原因: 全局变量,没有给初始值时,编译其会默认将其初始化为0。
i的初始值为0,i–结果-1,i为整形,sizeof(i)求i类型大小是4,按照此分析来看,结果应该选择B
但是这里sizeof的返回值是无符号整型,i的值-1将会被转化为一个非常大的值,所以条件判断的结果是真,答案应该为A

求此代码所输出的值: A.1 2 3 4 5 B.0 0 3 4 5 C.0 0 0 0 5 D.1 0 0 0 0
该题最大的一个坑是此处的指针p的类型是char *; 想理清该题,就的明白数据在内存中的存储。
由于指针是short* 类型的,一次只能访问2个字节,这就使得第一个循环只能访问的数组的前8个字节,也就是将arr[0]和arr[1]所占据的内存赋值为了0;

想当然的认为指针类型与所给数组的类型是匹配的,不仔细理解题目而动手操作。

A.1000 B.999 C.255 D.256
a是字符型数组,strlen找的是第一次出现尾零(即值为0)的位置。 要想让a[]为0,则a[]这个数据所占的内存,即所占的1个字节都要为0; 由于 a[i] = -1 - i,所以想要a[i]等于0,则i要等于255 因为当将-256存入内存中时,存入的数据是低八位,也就是8个0,则a[i]中的数据也就为0了,则strlen读取数据的时候,读取到第255位是就停止了,故答案选C。
看到这个题目时,一头雾水,没能明白其考察的核心内容是什么。