我在将二维数组作为参数传递给其他函数时遇到了问题。 当我尝试如下时,它不起作用。
#include <stdio.h>
int display(int **src) {
printf("%d", src[0][1]);
}
int main() {
int arr[2][2] = {{1,2}, {3,4}};
display(arr);
return 0;
}`
它会引发段错误。所以我改变了显示功能如下
int display(int src[][3]) {
printf("%d", src[0][1]);
}
我不确定为什么第一种情况会引发错误。 请帮助我深入了解这个案例。
请您参考如下方法:
int display(int **src) {
printf("%d", src[0][1]);
}
你不能这样做,因为编译器不知道维度(行和列),换句话说:C 不使用内省(introspection)。
相反:
int display(int src[][2]) {
printf("%d", src[0][1]);
}
或者如果你愿意
int display(int (*src)[2]) {
printf("%d", src[0][1]);
}
请注意,您不需要指定第一个维度,C 能够根据偏移量计算位置:(sizeof(int) * cols)
此外,如果您不想返回
值,则您 promise 从函数中返回
某些内容:
void display(int (*src)[2]) {
最后,正如 @Scheff 在评论中指出的,您的原始数组有 2 列,接收 3 列将破坏接收器中的索引。