[c]一个关于指针的问题
main()
{ int a[10]={2,4,6,8,10,12,14,16,18,20},*p;
p=a;
printf("%x\n",p);
printf("%x\n",p+9);
}
若假设第一个printf语句输出的是ffca,则第二个printf语句的输出是?
答案是ffdc?帮我解释一下为什么 谢谢
参考答案:首先,你的机器上int是16位(2个byte)表示的,指针加1,实际上是对应的地址值加其所指向的类型的大小(byte作为计量单位),你上面的问题里面,其实就是
ffca(这是数组的首地址值)+ 12_16(十进制表示下就是9*2 = 18 bytes)
做16进制的加法就得到
ffca
+ 12
ffdc
至于为什么地址值非要加以byte作为计量单位的值,是因为计算机内部寻址采用的都是byte模式的寻址。