C 为什么对指针为**的函数使用静态分配的2D表会导致分段错误
若将数组作为参数传递,数组将衰减为指针,但示例中的tab将衰减为int*[2],而不是int**。要使其正常工作,您需要将函数定义更改为:C 为什么对指针为**的函数使用静态分配的2D表会导致分段错误,c,C,若将数组作为参数传递,数组将衰减为指针,但示例中的tab将衰减为int*[2],而不是int**。要使其正常工作,您需要将函数定义更改为: #include <stdio.h> void init_tableau2D(int **t ,int ligne ,int colonne){ int i,j;
#include <stdio.h>
void init_tableau2D(int **t ,int ligne ,int colonne){
int i,j;
for(i=0;i<ligne;i++){
for(j=0;j<colonne;j++){
printf("%d\n",t[0][0]);
}
}
}
int main()
{
int tab[3][2]={{5,8},{11,6},{37,45}};
/* Here I have allocated staticly a 2D table*/
init_tableau2D(tab,3,2);
return 0;
}
选项卡未衰减为int**,它衰减为int*[2]。int**t应为int t[3][2]。请确保已在编译器上启用警告。您应该会看到关于不匹配类型的警告或错误。您可能对以下内容感兴趣:您能否解释一下为什么制表符被强制转换为int*[2]而不是int**?@RookedBishop在大多数情况下,数组会衰减为指向其第一个元素的指针,就像您将它们作为参数传递一样。int[n]将变为int*。但是如果你有一个数组,第一个元素是数组,因此它会衰减为指向数组的指针。所以int[3][2]将衰减为int*[2]。谢谢您的回答@RookedBishop可能也很有用。没问题。
void init_tableau2D(int ligne ,int colonne, int t[ligne][colonne])