Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么对指针为**的函数使用静态分配的2D表会导致分段错误_C - Fatal编程技术网

C 为什么对指针为**的函数使用静态分配的2D表会导致分段错误

C 为什么对指针为**的函数使用静态分配的2D表会导致分段错误,c,C,若将数组作为参数传递,数组将衰减为指针,但示例中的tab将衰减为int*[2],而不是int**。要使其正常工作,您需要将函数定义更改为: #include <stdio.h> void init_tableau2D(int **t ,int ligne ,int colonne){ int i,j;

若将数组作为参数传递,数组将衰减为指针,但示例中的tab将衰减为int*[2],而不是int**。要使其正常工作,您需要将函数定义更改为:

#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])