目录
数组笔试题
注:
sizeof(数组名)计算的是整个数组。
&数组名取出意义上为整个数组的地址,实际为首地址,移动单位为一个数组。
一维数字数组
题目
答案
字符数组
题目1
答案1
题目2
答案2
题目3
答案3
题目4
答案4
*题目5
*答案5
*注:
1.由指针创建的数组,其指针名称不为数组名称,故sizeof(p)计算为指针变量的大小。
2.&p在这里是取指针变量p的地址。
3.&p的移动单位为指针值(4/8 )。
4.&p到&p+1之间可能存在0,会使strlen直接结束。
*二维数组
题目
答案
*注
1.对于二维数组,数组名表示第一行的所有元素构成的数组地址。
2.a[0] 等价于 *(a + 0),用sizeof计算出来是第一行所有元素构成的数组的大小。
3.sizeof()内的表达式并不会,计算和访问,通过类型属性计算出大小。
因此a[3]并不会出现非法访问而报错,a[-1]也可以用sizeof计算出相应的值。
指针笔试题
笔试题1
答案
输出结果为 2,5
*笔试题2
答案
0x100014
0x100001
0x100004
解析
- 首先计算结构体的大小:4+4(补偏移量)+8+2+2+4(补偏移量)+8 = 32(最大成员变量的倍数关系)----->0x20(十六进制)
- p + 0x1移动一个结构体大小的单位。
- (unsigned long)将p强制转换为long类型,(转换后)p + 0x1变为数值加1,而非移动。
- (unsigned int*)将p强制转换为unsigned int*类型,加上后移动4字节(指针存储的地址移动)。
笔试题3
题目
答案
0x4,0x2000000
解析
笔试题4
题目
答案
1
解析
笔试题4
题目
注:指针相减得到的是之间的元素个数
答案
0xFFFFFFFC(补码形式直接输出地址)
-4
解析
笔试题5
题目
答案
10
5
解析
1.&aa + 1是跳过整个数组。
2.aa作为数组名,可以表示为第一行所有元素构成的数组的地址。
即:aa == &aa[0] aa != aa[0]
笔试题6
题目
答案
输出为at
*笔试题7
注:*与++和--的优先级相同
题目
答案
POINT
ER
ST
EW
解析
第二个打印输出的路线
此时cpp的值发生改变,c + 1变为了c