一道C语言题,关于指针的,若有说明语句"int a[5],*p=a;",则对数组元素的正确引用是?
2个回答
展开全部
下来看看这个程序的作用:
int a[5],*p=a;
前半句int a[5]是声明一个整型数组a,它有五个元素,分别是a[0]、a[1] 、a[2]、A[3]、a4[4],系统为她们分配五个连续的储存空间。
后半句*p=a,定义了一个指向整形变量的指针p,并且把a[0]的地址赋值给p,所以p的值是a[0]的地址,我们也叫把指针p指向数组a(或者元素a[0]);
再来看看四个选项:
A,a[p],它用p作为数组a的下标。在所有的编程语言中,系统自动分配给变量的储存地址都是一个非常大的数,所以a[0]的地址(也就是p的值)也是一个非常大的数(比4大得多),所以A[p]的下标非常大,所以也也不会是从a0至a4之间的任何一个元素,所以A[p]不会对数组的元素正确引用,故选项A是错误的。
B,p[2],因为p指向了数组a,所以,P[a]也代表,数组以a为下标的元素值。p[a],这里a的值其实就是等于a[0]的地址,而a[0]的地址又是一个非常大的数,所以,p[a]也不会正确的指向任何一个元素值,故选项b也是错误的;
C,先看p+2,代表指针p后面偏移两个整形数储存空间以后的地址,所以p+2代表的是a[0]偏移2以后(是a2)的地址,而*是取值运算,所以*(p+2)就代表了a[2]的值,所以能正确的代表元素a[2],所以C选项是正确的。
D,p+2,前面说了p代表的是元素a[0]的地址,所以p+2的结果就是a的地址,并不代表任何一个元素的值,所以d选项也是错误的
结论:选项c是正确的。
int a[5],*p=a;
前半句int a[5]是声明一个整型数组a,它有五个元素,分别是a[0]、a[1] 、a[2]、A[3]、a4[4],系统为她们分配五个连续的储存空间。
后半句*p=a,定义了一个指向整形变量的指针p,并且把a[0]的地址赋值给p,所以p的值是a[0]的地址,我们也叫把指针p指向数组a(或者元素a[0]);
再来看看四个选项:
A,a[p],它用p作为数组a的下标。在所有的编程语言中,系统自动分配给变量的储存地址都是一个非常大的数,所以a[0]的地址(也就是p的值)也是一个非常大的数(比4大得多),所以A[p]的下标非常大,所以也也不会是从a0至a4之间的任何一个元素,所以A[p]不会对数组的元素正确引用,故选项A是错误的。
B,p[2],因为p指向了数组a,所以,P[a]也代表,数组以a为下标的元素值。p[a],这里a的值其实就是等于a[0]的地址,而a[0]的地址又是一个非常大的数,所以,p[a]也不会正确的指向任何一个元素值,故选项b也是错误的;
C,先看p+2,代表指针p后面偏移两个整形数储存空间以后的地址,所以p+2代表的是a[0]偏移2以后(是a2)的地址,而*是取值运算,所以*(p+2)就代表了a[2]的值,所以能正确的代表元素a[2],所以C选项是正确的。
D,p+2,前面说了p代表的是元素a[0]的地址,所以p+2的结果就是a的地址,并不代表任何一个元素的值,所以d选项也是错误的
结论:选项c是正确的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询