C++的指针问题,请给详细讲解过程

来源:百度知道 编辑:UC知道 时间:2024/05/14 09:12:26
有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p=&a[3], b;
b=p[5];
则b的值是( )
A) 5 B) 6 C) 9 D) 8

楼上说的是对的,但是不够详细
答案确实是c
你可以这样理解
a[3]其实就是*(a+3)的值,a是数组的首地址,加3后就是往后再推三个元素,就是第四个元素,值就是4。
int *p;
p=&a[3];
这样指针p指向了a数组的第四个元素的地址,
p[5]就相当于*(p+5),就是p后再推5个地址的元素,就是a的第四个元素再往后推5个元素,就是第9个元素,值为9,即答案;
你也可以把p用a+3代替,这样*(p+5)就相当于*(a+3+5),就是*(a+8),即数组的第9个元素。

注:
数组的下标是从0开始的,*(a)或者*(a+0)就是数组的第一个元素

解释一下,希望是对的:
答案是C,p指针指向的是a[3]的地址,而a[3]的内容为4,即p[0]的值为4,此后地址顺延,p[5]就是9了,错误之处,还忘指正