C语言 麻烦各位大侠给解释个程序

来源:百度知道 编辑:UC知道 时间:2024/06/06 09:24:58
设A为存放(短)整型的一维数组,如果A的首地址为P,那么A中第i 个元素的地址为( )。

A.P+i*2 B. P+(i-1)*2 C. P+(i-1) D. P+i

麻烦帮忙详细解释下这里啦、谢谢啦。
书上找了好久都没找到相关的
弱弱的问一句啦、
a0=p
a1=p+2
a2=p+4
a3=p+6
...
ai=p+i*2 ?

选择B,在32位的编译器中短整形占2字节。首地址(也就是A[0])为P,那么A[1]为P+2……依次类推。都是最基本的东西,建议把基础打好。

关于补充问题:请我觉得答案是B

A中第1个元素是A[0], &A[0]=P 这里i=1 即 第1个元素地址为P+(1-1)*2=P
A中第2个元素是A[1], &A[1]=P+2 这里i=2 即 第2个元素地址为P+(2-1)*2=P+2
A中第3个元素是A[2], &A[2]=P+4 这里i=3 即 第3个元素地址为P+(3-1)*2=P+4
……
A中第i个元素是A[i-1], &A[i-1]=P+(i-1)*2

楼主没搞明白一个基本的问题吧,数组中的第i个元素是array[i-1]而不是array[i],因为是从array[0]开始算的。

这个是我刚才写的代码,和运行结果,
由于是在LINUX下编译的不知道和WIN32有没有差异,你参考下吧.

#include <stdio.h>
main()
{
short a[]={1,2,3,4,5,6,7,8,9,10};
printf("%d %d %p %p\n",a[6-1],*(a+6-1),a,&a[6-1]);
}

运行结果:
6 6 0xbf91f630 0xbf91f63a

如果把A[0]叫做第0个元素的话, 答案是A
如果把A[0]叫做第1个元素的话,答案是B

p为A的首地址,既A[0]的地址是p,A[1]的地址就是p+2,依此类推A[i]的地址就是p+(i)*2。因为short的大小为2.