首页 > 试题广场 >

具有相同类型的指针类型变量p与数组a,不能进行的操作是:

[单选题]
具有相同类型的指针类型变量p与数组a,不能进行的操作是:
  • p=a;
  • *p=a[0];
  • p=&a[0];
  • p=&a;
两个变量是相同类型才可以相互赋值(强制转换除外!)
假设有定义:int* p = NULL, int a[n]; 
A: 数组名a类型为int *,与指针变量p是相同类型,可以赋值,正确;
B:a[0]与*p都是int 型,可以赋值,正确;
C:&a[0] 的类型为int *,所以可以赋值,正确;
D: &a的类型为 int (*) [n],即指向数组的指针,&a+1直接就跳到了数组最后一个元素的后一个元素,所以无法赋值,错误。如果p定义为 int (*p) [n], 则 p = &a是正确的操作,
发表于 2016-08-20 11:17:05 回复(1)
更多回答
发表于 2016-08-09 10:52:40 回复(6)
没有人提到B选项
如果p没有初始化的话是很危险的行为。

发表于 2017-08-04 14:36:09 回复(0)
所p没有分配内存 B不正确
发表于 2017-04-30 20:50:52 回复(1)
最后一个p=&a错误,原因是&a表示数组类型的指针,而p是元素类型的指针,假定元素类型为int,数组长度为10,则p的类型为“int *”,&a的类型为“int (*)[10]”,不兼容,故错误。
发表于 2016-09-29 09:24:28 回复(0)
B是有问题的,p并没有明确指向一个可用的空间,去给改地址赋值程序会崩溃 D选项在C语言中是合法的,但是在C++中不合法,编译通不过
发表于 2017-07-18 14:38:59 回复(0)
A: r若数组名a类型为int *,与指针变量p是相同类型,可以赋值,正确;
B:a[0]与*p都是int 型,可以赋值,正确;
C:&a[0] 的类型为int *,所以可以赋值,正确;
D: &a表示数组类型的指针,而p是元素类型的指针  &a的类型为 int (*) [n],即指向数组的指针,&a+1直接就跳到了数组最后一个元素的后一个元素,所以无法赋值,错误。如果p定义为 int (*p) [n], 则 p = &a是正确的操作,
发表于 2017-03-31 20:43:21 回复(0)
a表示数组a的地址指针,a和p类型相同,所以p=a操作正确;
*p表示p指向的值,a[0]表示数组的第一个值,两者类型相同,可赋值,正确;
&a[0]是数组第一个元素的地址,与a相同,也是指针,可赋值,正确;
a本身是一个指针,而&a表示a的地址,地址是int型,但p不一定是int型的,错误。
发表于 2016-01-12 15:14:31 回复(4)
数组名就是一级指针
数组地址为二级指针
发表于 2016-02-24 22:20:31 回复(1)
c可以,c++严格限制类型,有安全性检查
发表于 2019-08-15 16:52:04 回复(0)
有人和我一样选的b然后就没在往下看了吗?
发表于 2019-06-29 16:41:53 回复(0)
具有相同类型的指针类型变量p与数组a,p不能等于&a,维度不一样。int a[10] = {0}; int *p = a; int **q = &a;需要升维度!
发表于 2018-01-22 09:19:03 回复(0)
答案是D,&a的二级指针,类型为数组指针  int (*)[4],而p为int*,肯定不能进行等号操作。 对于B选项,如果p没有实际的地址,也就是说不是动态创建new出来的,B选项编译没有问题,运行就会出错。
发表于 2017-06-15 10:11:14 回复(0)
假定都是int型!&a;指向一个含有3个数组的指针,即(int*)[3],而p应该指向一个int
发表于 2016-08-26 21:04:38 回复(0)
&a是指针的指针,类型不对
发表于 2016-05-20 17:19:30 回复(0)