首页 > 试题广场 >

若有说明语句“int a[10],*p=a;”,对数组元素的

[单选题]
若有说明语句“int a[10],*p=a;”,对数组元素的正确引用是
  • a[p]
  • p[a]
  • p+2
  • *(p+2)
果然不会C++的Java程序员,不是一个好的Java程序猿。
发表于 2020-06-14 20:30:05 回复(0)
注意 是对数组中元素的引用 a为数组名 也代表数组首元素的地址值 *p=a则p也指向数组a的第一个元素地址,则*(p+2)指向数组a中第三个元素
发表于 2020-02-09 01:53:43 回复(0)
选了三个错的,偏偏没有选D,心累。。。
编辑于 2019-12-24 11:05:22 回复(3)
多选只有一个答案醉了
发表于 2022-02-07 19:39:04 回复(0)
这是C或C++语言的指针用法,*表示取地址里面的值,&表示取地址,a和p是数组首地址的值,A和B选项超过了数组界限,C选项表示地址值(注意不是地址里面的值)。 这类似Java里面的栈和堆的区别,Java中没有指针概念,int[] a=new int[5],a作为一个地址引用存放在栈中,创建的对象在堆中开辟5个int类型数据的空间,a是一个引用,里面的值是堆中a[0]的地址。
发表于 2020-05-05 11:54:08 回复(0)
在C语言中,约定数组名单独出现在表达式中时,它表示数组首元素的指针。有int a[10],则a可以作为&a[0]使用。另有整型指针变量p,代码p=a实现p指向数组a的首元素。则表达式*(p+2)是引用数组元素a[2]。选项AB的表达式a[p]和p[a]都是不正确的, 下标必须是整型表达式,不可以是指针表达式。表达式p+2是指针表达式,它的值是&p[2]。所以只有表达式*(p+2)引用数组a的元素a[2]。所以选D!!!
发表于 2020-08-08 17:31:42 回复(0)
选D告诉我多选,多选告诉我只有D对。。。
发表于 2022-03-05 19:56:21 回复(0)
int a[10]; 声明了一个连续空间大小为10个整型大小(我的32位编译器下是10*4Byte)的int数组,数组起始位置的指针为a,也就是说a存储的是起始位置。
int* p = a; 声明一个int指针,指向a所指向的位置,也就是说p存储的内容和a是相同的,都是数组起始地址。

对于数组中元素的访问引用,一般可以通过 数组首地址[偏移量] 访问,也就是a[2]这样子;

也可以通过移动指针 *(数组首地址+偏移量) 访问,也就是*(a+2)这样子。因为数组空间是顺序的,a+2表示距离首地址两个int类型大小的空间的地址,即数组的第三个元素的地址。根据指针的知识,访问指针指向地址的内容时,需要给地址变量加上*号,这就是*(p+2)中*号的由来。

各种访问的异同参见下图,直观明了。

(可以看到我这里一个int空间为4个字节,声明的数组的首地址为6487536,也就是说第一个元素占用了6487536、6487537、6487538、6487539四个字节,第二个元素占用了64875406487541、6487542、6487543这四个字节的空间,后面以此类推

  • 总结
    • a=p
    • *a=a[0]=*p=p[0]
    • *(a+2)=*(p+2)=a[2]=p[2]
    • &a[2]=&p[2]=a+2=p+2
IDE Dev-C++ 5.10 32位编译器
#include<stdio.h>

int main(){
	int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
	
	printf("a=%d\n",a);
	printf("p=%d\n",p);
	printf("a[0]=%d\n",a[0]);
	printf("p[0]=%d\n",p[0]);
	
	printf("*a=%d\n",*a);
	printf("*p=%d\n",*p);
	
	printf("a+1=%d\n",a+1);
	printf("p+1=%d\n",p+1);
	
	
	printf("*(a+2)=%d\n",*(a+2));
	printf("*(p+2)=%d\n",*(p+2));
	return 0;
}


编辑于 2022-04-05 11:45:00 回复(0)
服了,只知道d是对的,又看到多选题又选了一个
发表于 2022-02-21 12:06:20 回复(0)
说的是数组元素的引用!!!!!
发表于 2020-08-12 21:03:18 回复(1)
D 不是对地址的引用吗?
发表于 2020-02-05 17:52:15 回复(0)
先是定义一个int型的数组,声明的指针p是指向数组中首元地址,选项中的*表示取值运算符
发表于 2023-01-13 16:31:44 回复(0)
对数组元素的引用,不是地址
发表于 2023-01-10 16:53:51 回复(0)
这是C或C++语言的指针用法*表示取地址的值,&表示取地址,a和p是数组首地址的值,A和B选项超过了数组界限,C选项是地址的值
发表于 2022-07-08 11:32:25 回复(0)
多选题只有一个答案?
发表于 2022-03-30 13:01:24 回复(0)
本来判断出只有d,又要说是多选
发表于 2022-03-15 13:03:15 回复(0)
选了AD,说好的多选呢
发表于 2022-03-10 08:23:21 回复(0)
AB里的下标结果都不是整型,C是a[2]的地址,D是a[2]元素的值
发表于 2020-10-29 13:54:53 回复(0)

求解析,瞎蒙的,js语言的我表示没看懂

发表于 2020-01-11 22:02:57 回复(1)