若有以下定义和语句:
int a[10]={1,2,3,4,5,6,7,8,9,10},p=a;
则不能表示a数组元素的表达式是( )
A) *p B) a[10] C)*a D) a[p-a]
不能表示a数组元素的表达式是( B) a[10] )----因为数组a的最大下标只能是9,即a[9],
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],一共10个元素。
A、*p ---表示取p指针指向的单元的值,即表示取数组a的首个元素a[0]的值。
B、a[10] ---因为数组a一共10个元素,从0开始计数,
即a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],正好10个,没有a[10],所以a[10]就是不能表达这个数组元素。
C、*a ----数组名a中保存的是数组的首地址,*是取单元中的值,*a就是取数组首地址中单元中a[0]的值。
D、a[p-a] --- p指向的是数组a,因为p中与a同数据相同都是数组a的首地址,而p-a就等于0,因此 a[p-a]就相当于a[0]。
扩展资料:
数组元素也是一种变量, 其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。在C语言中只能逐个地使用下标变量,而不能一次引用整个数组。
数组元素的一般形式为:
数组名[下标]
其中下标只能为整型常量或整型表达式。如为小数时,C 编译将自动取整。
例如:
a[5]
a[i+j]
a[i++]
都是合法的数组元素。
参考资料来源:百度百科-数组元素
那A ,B,C 分别是什么意思啊
追答A. *p ---表示取p指针指向的单元的值,即表示取数组a的首个元素a[0]的值
C. *a ----数组名a中保存的是数组的首地址,*是取单元中的值,*a就是取数组首地址中单元中a[0]的值
D. a[p-a] --- p指向的是数组a,因为p中与a同数据相同都是数组a的首地址, 而p-a就等于0,因此 a[p-a]就相当于a[0]啦
B. a[10] ---因为数组a一共10个元素,从0开始计数,即a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],正好10个呀,根本没有a[10]呀,所以a[10]就是不能表达这个数组元素的啦
那A ,B,C 分别是什么意思啊
...int a[10]={1,2,3,4,5,6,7,8,9,10},p=a; 则不能表示a数组元素的表 ...
即a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],正好10个,没有a[10],所以a[10]就是不能表达这个数组元素。C、*a ---数组名a中保存的是数组的首地址,*是取单元中的值,*a就是取数组首地址中单元中a[0]的值。D、a[p-a] --- p指向的是数组a,因为p...
若有以下定义,“int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a”,则值为6...
B表示元素a[6],即7;C是一个表达式;D表示a[5]的地址,不是元素。
...{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p-2; printf...
①*p=&a[3],所以*p=4(这个不解释了)②A我们明确一个概念,就是a[10]这串位置是连续的。B假设i=*p(i为p所指的单元格的值)。*p=4,即i=&a[3]=4 Cp-2即p所在的地址往前推2单元格;即i所指的值往前推2单元格,即i=&a[3]往前推2单元格,即&a[1]=2 综上所述4+2=6 ...
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,0};请输出数组a的首址和...
它的地址当然就是这个数组的首地址了,所以数组a的首地址和a[0]的地址相等。代码如下:include <stdio.h> int main(){ int a[10]={1,2,3,4,5,6,7,8,9,0};printf("数组a的首地址为\\t%d\\n",a);printf("a[0]的地址为\\t%d\\n",&a[0]);return 0;} 运行结果为:...
已有定义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"); } 已赞过 已踩过< ...
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5];
a可以理解为这个数组的首地址 a[3]是指向第4个元素 所以p指向第4个元素 p[5]是从p后的5个 也就是第9个元素 所以b=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
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.上面的解释你应该明白了吧
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是
选B 记住这样一个无条件相等的等式:(p+i)与P[i]无条件等价。因为p是指向数组a首元素的地址,所以p[i]又和a[i]等价。易知B选项即为p[8],也即为a[8],其值为9。