有如下程序c
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. 8??
D. 9
D 是正确的。首先*p = &a[3]是将数组a[10]里的第四个数(下标从0开始,所以a[3]=4),那么p在内存中第一个指向的因该是4这个数,所以p[]={4,5,6,7,8,9,10},p[5]为数组中第六个数即9.
上面的解释你应该明白了吧
上面的解释你应该明白了吧
温馨提示:答案为网友推荐,仅供参考
第1个回答 2009-12-30
题目都写错了。。
应该是 int *p=a[3] &是取地址 如果是地址的话 对应的应该是p,*P存放的是内容。
1 2 3 4 5 6 7 8 9 10
p当前指向的位置是 a[3]中的内容,对应的内容就是 4
*p 的初值就是4, *(p+5)= 9
#include <stdio.h>
int main (int argc,char *argv[ ])
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p;
p=&a[3];
printf("%d\n",*(p+5));
return 0;
}
结果就是9
应该是 int *p=a[3] &是取地址 如果是地址的话 对应的应该是p,*P存放的是内容。
1 2 3 4 5 6 7 8 9 10
p当前指向的位置是 a[3]中的内容,对应的内容就是 4
*p 的初值就是4, *(p+5)= 9
#include <stdio.h>
int main (int argc,char *argv[ ])
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p;
p=&a[3];
printf("%d\n",*(p+5));
return 0;
}
结果就是9
第2个回答 2009-12-30
用VC一试就知道了,结果是9,应该选D(你的问题写得太有迷惑性了,我还以为实际情况是8呢,怎么也想不通,只好自己试了一遍~)
int *p = &a[3],一句是将a[3]的地址赋给p,而a[3]指的是数组中的‘4’;
b=p[5];再把p[5]赋给5,而p[5]指的是p[0+5],从4往后数5个,自然是9了。
注意p[0] = a[3] = 4
int *p = &a[3],一句是将a[3]的地址赋给p,而a[3]指的是数组中的‘4’;
b=p[5];再把p[5]赋给5,而p[5]指的是p[0+5],从4往后数5个,自然是9了。
注意p[0] = a[3] = 4
第3个回答 2010-01-05
你这是C还是C++??
C++中应该这样解释:
int *p = &a[3]; //p指向a[3]
b = p[5];//p = p + 5;(即a[3+5])
//b = p[-1];就是a[3-1]
实际上是对数组元素的指针做下标操作
答案是D
C++中应该这样解释:
int *p = &a[3]; //p指向a[3]
b = p[5];//p = p + 5;(即a[3+5])
//b = p[-1];就是a[3-1]
实际上是对数组元素的指针做下标操作
答案是D
第4个回答 2009-12-30
选D,因为p是a[3]的地址,再加5就是a[8],所以是9