首页 > 试题广场 >

问下面哪些不可以表示a[1]的地址? int a[1

[单选题]
对于代码段
int a[10];
问下面不可以表示a[1]地址的是()
  • &a[0] + 1
  • a + sizeof(int)
  • (int*)&a + 1
  • (int*)((char*)&a + sizeof(int))
有图有真相,a+sizeof(int),等价于a[4]的地址,因为数组a为int型,步长为4,+1就相当于向前进了4字节,等于a[1]地址,+4相当于进了16字节,等于a[4]地址
发表于 2020-09-11 10:52:16 回复(0)
实验证明,&a[0]是首地址+1就为下一节点的地址,
sizeof(int)=4,一个int占4个字节,在a的基础上+4相当于在加了16个字节,
&a为地址,(int *)&a是将地址转换为int型的指针,(int *)&a+1是指指针向后挪一位
(char *)&a将a的地址强制转换为char型指针,然后加上4相当于向后挪4个char的位置,每个位置一个字节,于是相当与一个int的位置,再强制转换为int型指针.
发表于 2021-11-05 21:45:43 回复(2)
看地址是什么数据类型的地址,d中强转为char * 类型,所以+4 等于int类型+1,最后再转回int *型 
发表于 2021-03-04 09:52:16 回复(1)
a为数组的时候
&a + 1 移动sizeof(数组)字节
 a + 1 或者 &a[0] + 1 移动sizeof(int) ,即移动到下一个数组元素
C将a变成了指针 int *类型,指针+1 都是移动sizeof(int) ,移动到下一个元素的
D指针绕来绕去的,变成char* 后 +4 ,移动 4* (sizeof(char)),移动四个字节,然后又重新强转成了int*,依然指向下一个元素

发表于 2022-03-12 22:22:32 回复(1)
<p>这个题关键是看a的类型和步长 要得到a【0】则需要向后移动四个字节</p><p>A 相当于整形指针加一,移动四个字节</p><p>B相当于整形指针加四,移动十六个字节</p><p>C相当于先将数组指针转化为整形指针加一移动四个字节</p><p>D相当于将数组指针转化为字符指针加四移动四个字节在转化为整形指针</p>
发表于 2021-03-15 18:02:44 回复(1)
绝了,D转成char*再加4字节,1+4刚好到a[1]元素首地址
发表于 2023-01-12 00:23:59 回复(0)
c,d怎么看
发表于 2021-02-26 02:27:32 回复(1)
注意:指针的步进距离的单位,是指针指向的对象
发表于 2021-02-18 16:39:09 回复(0)
有谁可以议论纷纷一下这个题答案选项中的 amp 是啥嘛?
发表于 2020-08-04 10:06:26 回复(5)
HTML的< >"©分别是<,>,&,",©;的转义字符。 XML只有5个转义符: < >& " '。
发表于 2021-03-27 11:37:33 回复(0)