有如下程序 int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a; 则数值为9的表达式是( ) A.

有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a;
则数值为9的表达式是( )
A. *P+9 B. *(P+8) C. *P+=9 D. P+8

第1个回答  2018-08-31
B. *(P+8)
因为P为指向a[0]的指针,P+8即为a[8]追答

B. *(P+8) 因为P为指向a[0]的指针,P+8即为&a[8],所以*(P+8)即为

本回答被网友采纳

...int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a; 则数值为9的表达式是...
因为P为指向a[0]的指针,P+8即为a[8]

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是
(p+i)与P[i]无条件等价。因为p是指向数组a首元素的地址,所以p[i]又和a[i]等价。易知B选项即为p[8],也即为a[8],其值为9。

int a[10] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,
p=&a[3]就是p指向了a[3],然后p[5]=>*(p+5)就是在a[3]的地址上再往后移动5个,就是a[8]了,当然就是9的值了,答案就是D

main() {int a[10]={1,2,3,4,5,6,7,8,9,0},*p; p=a; printf("%x\\n",p...
结果是两个地址值(以十六进制显示出来),其中第一个是a[0]的地址,因为*p=a[0], p=&a[0], 即指针p指向的是数组a的首地址(即a[0]的地址)。望采纳

main() { int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=a; printf(〃%d\\n...
(p+2)就是先把P指向的地址后移两个单位,P初始化指向a数组首地址,后移两个单位后即 a[2]= 3 ;

int a[10]={1,2,3,4,5,6,7,8,9,10};
D 是正确的。首先*p = &a[3]是将数组a[10]里的第四个数(下标从0开始,所以a[3]=4),那么p在内存中第一个指向的因该是4这个数,所以p[]={4,5,6,7,8,9,10},p[5]为数组中第六个数即9.上面的解释你应该明白了吧

)有如下程序C int a[10]={1,2,3,4,5,6,7,8,9,10}; int *p=&a[3...
9 p指向a[3],即4。p[5]=*(p+5).对应关系 p 4 p+1 5 ………p+5 9

若有int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则输出结果不为5的语句
答案:D 对于数组a[10],a就是该数组的首地址,定义指针p赋值为a,那么a和p的操作基本相同:a[5]=p[5]=*(a+5)=*(p+5),对于D选项,p[5]是个int值,再取*就不对了。

有如下说明int a[10]={1,2,3,4,5,6,7 },*p=a;则数值为5的表达式是A.*...
*(p+1)就代表存储单元a[1],注意,一对圆括号不可少。同样,对于数组元素a[2],则可以用表达式*(p+2)来引用,……,对于数组元素a[9],可以用表达式*(p+9)来引用。因此,当指针变量p指向a数组的起始地址时,若0≤i<10,则数组元素a[i]可以用*(p+i)来表示。

已有定义int a[10]={1,2,3,4,5,6,7,8,9,10} 要求通过指针完成从一维数组...
int a[10]={1,2,3,4,5,6,7,8,9,10}; int i,k,n=10,*p=a; printf("input k="); scanf("%d",&k); for(i=k-1;i<n;i++) *(p+i)=*(p+i+1); n--; printf("After delete:\\n"); for(i=0;i<n;i++) printf("%d ",a[i]); printf("\\n"); } 已赞过 已踩过< ...

相似回答