#include<stdio.h>
int test(int *x);
void main(){
int arr[2][3], a;
arr[1][2] = 2;
printf("%d\n", test((int *)arr));
printf("%d\n", *(*(arr+1)+2));
}
int test(int *prr){
int a;
a = *(*(prr+1)+2);
return a;
}
上面的代码给了我以下错误:
error: invalid type argument of unary ‘*’ (have ‘int’)
a = *( *(prr+1)+2);
^
但相同的声明适用于主函数:
printf("%d\n", *( *(arr+1)+2)).
另外,当我将其替换为*((arr+1*3) + 2)
时,3是第二维的大小,在功能测试中,它工作了,我不明白怎么办?我真的很想知道原因。请帮忙!!!
为什么在传递给函数时需要类型转换 2D 数组,而不是 1D 数组。
我使用了 http://www.geeksforgeeks.org/pass-2d-array-parameter-c/ 的帮助,但原因并不存在。
最佳答案
在main
函数中,arr
是一个int
数组的数组。 *(*(arr+1)+2)
相当于 *(arr[1] + 2) = arr[1][2]
。 arr[1]
是一个数组,将衰减为指向第一个元素 arr[1][0]
的指针。
在测试中,prr
是一个指向int
的指针。 *(prr+1)+2
相当于 *(prr[1] + 2)
。 prr[1]
是一个int
。这使得表达式 prr[1] + 2
成为 int
。一元*
运算符的操作数必须是指针变量。
将函数原型(prototype)更改为
int test(int x[][3]);
并进行函数调用
printf("%d\n", test(arr));
关于c - 当我将二维数组传递给函数 (tes).t 时,为什么声明 *(*(arr+1)+2) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39184731/