若定义int a[5],*p=a;则正确引用数组元素的是 A*&a[5] B*a+2 C*(p+5) D*(a+2) 求详细分析过程 谢。。。

如题所述

若定义int a[5],*p=a;

则A选项中,*&a[5],
&a[5]是a[5]的地址,
*&a[5]是a[5]本身
但数列中没有a[5]这个元素,错误。
*与&为逆运算

B选项中*a+2
*a为a[0]
则*a+2为a[0]+2,不是a[2],错误

C选项中*(p+5)
p+5=a+5为a[5]的地址
*(p+5)为a[5],
如同A中,数列中没有a[5]这个元素,错误。

D选项中,*(a+2)
a+2为a[2]的地址
*(a+2) ==a[2]与a[2]等同

选D追问

怎么看出a[5]在数组总不存在呢?

追答

你定义数组时,
int a[5];
定义了5个元素,即 a[0],a[1],a[2],a[3],a[4]
没有a[5]这个元素!!!

温馨提示:内容为网友见解,仅供参考
无其他回答

若有定义int a[5],*p=a;则正确引用数组元素的是 a *&a[5] b *a+2 c
正确引用数组元素的 是 *(a+2), 它等同 a[2];(p+5) 错在超界了。如果是 *(p+2) 或 *(p+4) 那么也是对的。 *(p+5) 指向 a[5], 按声明,下标最大到 a[4]。&a[5] -- 也是下标超界 a+2 是 a[0]+2, 不是 引用 1个 数组元素,而是表达式。

...则对a数组元素的正确引用是( )。 int a[5],*p=a; A. *&a[5] B...
D正确,选D。因为:A:语法合法,但[5]越界了。B:a+2是地址,不是元素。C:与A一样,只是指针写法,p+5越界了。

C语言int a[5],*p; p=a;和p=&a;的对错问题~希望详细点,谢谢啦
所以,p=a; 或p=&a[0]是正确的,表示指针p指向数组的首元素。

c语言若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元...
然后呢,p=a;就是把p指向a数组。分析选项:A p+1 .因为p是一维数组指针,所以p每+1就是+1行。错误。B (p+3)是指第4行的首地址,访问不到元素。需要再 C (p+1)+ 3 对地址+3 没啦意义 D (*p+2)p是第0行首地址 +2 呢就是第二个元素的地址,*取数据咯。

有定义:int a[5], *p=a;,数组a的首地址为100,则p+2等于( )。 A) 1...
看答案这个int类型是双字节的,p+2的意思就是指向a[2] 的地址,&a[0] = 100 , &a[1] = 102 &a[2] = 104 答案选C 如果是四个字节的int型 &a[0] = 100 , &a[1] = 104 &a[2] = 108 \/\/这个不符合答案选项

求答案,求答案。 若有以下定义和语句,则对a数组元素的正确引用为?
int a[2][3]:这定义了一个二维数组a,它有 2 行 3 列,总共可以存放 2×3 = 6 个int类型的元素。可以把它看作是由两个一维数组组成的数组,每个一维数组有 3 个元素。(*p)[3]:定义了一个指针p,p是指向一个包含 3 个int类型元素的数组的指针。然后p = a,这使得p指向了二维数组a...

...式子:int a[5],*pa=a; pa+=2; 他说:*pa=a+2*2=a+4,而不是=a+2 这...
在这行代码中int a[5],*pa=a; pa的值就是数组a的首地址, pa+=2就是向后移动两个元素的位置,pa+=2 和 pa = a +2是一样的,而不是a +4。a+4就是从数组的首地址开始移动4个偏移量,是错误的。

...*cp)[5];和语句cp=c,则能正确引用c数组元素的是
答案是d,解释如下:(*cp)[5]该指针的类型是int (*)[5](是指向int [][5]这样的二维数组的指针),cp=c;则cp指向的是c数组的第一个元素,即c[0],cp要引用c的数组元素,则通过*cp。但是同时c[0]它是一个数组长度为5的整型数组,c[0]是数组名,它本身就是一个地址了,而数组名亦及...

...2)使用指针移动的方式,输入5个整型数组元素.
int a[5];int *p=a; \/\/定义一个整型指针变量p,使它指向一个5个元素的一维数组.int i;printf("Please input:");for(i=0;i<5;i++)scanf("%d",p+i); \/\/使用指针移动的方式,输入5个整型数组元素.int *q=(int*)malloc(sizeof(int)*5); \/\/malloc函数动态分配5个整型数的...

若已定义:int a[5]={0,1,2,3,4},*p=a,则以下输出结果为3的是()
p=a;那么p的值也是&a[0];p和a都表示地址,所以*就是取地址对应的值。(a+2)就是首地址值往后+2的地址,也就是&a[2],那么*(a+2)就是a[2]的值2。同理*(P+2)也是a[2]的值2。p[3]是不对的,p[3]不是地址是值。注意:这里p和a值一样,但意义不同。p是指针值可以改变,a...

相似回答