假设数原型和变量说明如下:
void f4(int **p); int a[4]={1,2,3,4}; int b[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int *q[3]={b[0],b[1],b[2]};
下面调用合法的是()
A. f4(a); B. f4(b); C. f4(q); D. f4(&a);
f(a). a 被传入函数形参时, 会退化成指向其首元素的指针, 类型是 int*, 不符. f(&a). &a 是数组 a 的地址, 其类型是 int()[4], 不符. f(b). b 是数组的数组. b 被传入函数形参时, 会退化成指向其首元素的指针, 也就是 b[0] 的地址, b[0] 的类型是 int[4], 故 &b[0] 类型是 int()[4], 不符. f(q). q 是一个指针数组, 在初始化时, 用 b[0], b[1], b[2] 初始化了, 此时 b[0], b[1], b[2] 会退化成指向各首元素的指针(int* 类型, 因此类型符合, 可以用它们初始化). q 被传入函数形参时, 退化成指向其首元素的指针, 即 int**. 符合 ————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/mantouyouyou/article/details/129699022
在选项 B 中,将二维整型数组 b 作为参数传递给函数 f4,这是不合法的。因为 b 是一个二维数组,它的类型是 int[3][4],而函数 f4 的参数类型是 int **,这两者的类型不匹配。
b
f4
int[3][4]
int **
LukeSu 回复 LukeSu: 在选项 B 中,将二维整型数组 b 作为参数传递给函数 f4,这也是不合法的。因为 b 是一个二维数组,它的类型是 int[3][4],而函数 f4 的参数类型是 int **,这两者的类型不匹配。
对了
选C。
根据题干void f...
用户登录可进行刷题及查看答案
根据题干void f4(int **p); f4的参数为指向指针的指针,即p为一个指针的地址。指向指针的指针是一种多级间接寻址的形式。
登录后提交答案