首页 > 试题广场 >

设有语句 int b[3][4]; 下面哪一条语句是正

[单选题]
设有语句
int b[3][4];
下面语句正确的是()
  • int *p[]={b[0],b[1],b[2]};
  • int *p[]=b;
  • int *p[2]={b[0],b[1],b[2]};
  • int *p[]=(int *[])b;
推荐
A。题干int b[3][4]声明的是一个二维数组。
  • 选项A为指针数组,内容为指针类型的数组元素,所以正确。
  • 选项B 数组名b相当于一个地址(指针),直接赋值给数组不合法。
  • 选项C 数组索引下标越界。
  • 选项D 对数组名b,即地址(指针)进行强制转换为数组类型。
编辑于 2019-08-28 14:23:49 回复(0)
选A,b本身为数组指针,b[0]退化为正常一级指针,可以被添加到一个指针数组中
发表于 2019-08-27 16:34:47 回复(0)

int b[3][4];
  • int *p[]={b[0],b[1],b[2]};
  • int *p[]=b;
  • int *p[2]={b[0],b[1],b[2]};
  • int *p[]=(int *[])b;
A选项,b[0],b[1],b[2]是每一行的一维数组的数组名,也就是首元素的地址。类型为int*,可以保存到整型指针数组中。
B选项,b是二维数组的数组名,也就是首元素的地址,即第一行整个数组的地址,类型为int(*)[4],可以用数组指针保存,即int(*p)[4] = b。
C选项,只能容下2个整型指针元素。
D选项,p是一个数组,而不是数组指针,数组的初始化不应该直接赋值,应该是int*p[] = {(int*[])b};

发表于 2023-05-02 10:21:46 回复(0)
选A。题干int b[3][4]声明的是一个二维数组。
选项A为指针数组,内容为指针类型的数组元素,所以正确。
选项B 数组名b相当于一个地址(指针),直接赋值给数组不合法。
选项C 数组索引下标越界。
选项D 对数组名b,即地址(指针)进行强制转换为数组类型。
发表于 2021-11-18 16:06:21 回复(2)
选择A
A 是创建一个整形指针数据,存放3个指针元素
B b单独拿出来表示首元素的地址 表示b[0] 但是数组的赋值必须要有{},没见过谁家数组int a[]=1这样写的吧都这样写int a={1} 只有字符数组可以char a[]="abc"
C 是可以存放2个 你存放3个肯定不对啊
D 首先跟b差不多问题 然后强转是一个数组指针
本人是初学者,有问题虚心接受大佬的指点
发表于 2022-04-12 22:06:54 回复(0)
选A,p是一个指针数组,数组元素是int类型的指针,b是一个二维数组,b[0],b[1],b[2],本质上是一个数组,直接调用等效于用了数组名,数组名就是该数组的首元素地址,数组的元素类型也是int类型,p数组的元素int*可以指向int,所选择A
发表于 2022-03-29 15:01:42 回复(1)
选b
A,左边是一个数组,存放的是指向int类型的指针,而右边每个元素并不是指向int的指针
C,  容量超了,而且右边每个值是指向数组的指针,和左边不匹配
D,不能这么强转
发表于 2019-08-27 17:03:26 回复(3)
p先和[]运算,表示生成的是数组,再和*结合表示数组里面的元素是指针,int类型表示里面的存储地址应该指向int型数据,b[1]表示的是指针,相当于一个一维数组,指向int型,故a正确,至于b选项,因为生成的是数组,所以没有这种赋值方式,c超出范围,d与b错误一致
发表于 2024-05-16 21:07:19 回复(0)
p没(*p),所以是指针数组 二维数组里b[0]是行指针 指针放入指针数组
发表于 2022-04-21 16:51:34 回复(0)