IT虾米网

c之将二维数组作为参数传递

Leo_wl 2025年05月04日 程序员 62 0

我在将二维数组作为参数传递给其他函数时遇到了问题。 当我尝试如下时,它不起作用。

#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 列将破坏接收器中的索引。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!