永发信息网

c语言中一维数组a[i]的地址到底是a+i还是a+i*sizeof(int)?

答案:3  悬赏:60  手机版
解决时间 2021-12-03 17:37
  • 提问者网友:沉默菋噵
  • 2021-12-03 14:09
c语言中一维数组a[i]的地址到底是a+i还是a+i*sizeof(int)?
最佳答案
  • 五星知识达人网友:一把行者刀
  • 2021-12-03 15:05
如果a[]是int型数组,设a的地址是0,由于int是4字节,那么a+2就是地址8;编译器把a+2自动理解为a+2*sizeof(int),如果写成a+2*sizeof(int),那么上例中的地址就是32(因为a+2*sizeof(int)=a+8,编译器理解为a+8*4)而不是8了。所以a+2和a+2*sizeof(int)绝不是同一地址。也可以这样说,写a+2,编译器认为是a+2*sizeof(int);而如果写a+2*sizeof(int),则编译器认为是a+2*sizeof(int)*sizeof(int)!
全部回答
  • 1楼网友:何以畏孤独
  • 2021-12-03 16:21
a+i*sizeof(int)
i 表示移动i个单位。。。单位大小取决于指针类型
  • 2楼网友:傲气稳了全场
  • 2021-12-03 15:30

试试不就知道了?编译器会根据元素类型来决定步长.

#include
int main (void)
{
 int a[3];
printf("%p == %p",&a[2],a+2);
}

我的结果是一样的.

追问那a+2和
a+2*sizeof(int)代表的是同一个地址吗追答不是.除非这样(char*)a+2*sizeof(int)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯