将2-d数组传递给函数。 为什么在此代码中出现运行时错误?
#include<stdio.h>
void cpc(int **x){
int i,j;
for(i=0;i<3;printf("\n"),i++)
for(j=0;j<3;j++)
{
printf("%d ",(*(*(x+i)+j)));
}
}
int main(){
int a[3][3] = {1,2,3,4,5,6,7,8,9};
int **b = (int**)a ;
cpc(b);
return 0;
}
答案 0 :(得分:2)
代码中的问题是[3] [3]不是int **,它是一个int *并且它是连续的内存。
这是您的代码可以工作的方式之一。
#include<stdio.h>
void cpc(int **x){
int i,j;
for(i=0;i<3;printf("\n"),i++)
for(j=0;j<3;j++)
{
printf("%d ",(*(*x+(3*i)+j)));
}
}
int main(){
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int *b = a;
cpc(&b);
return 0;
}
如果你想要在你的cpc函数中使用int **,你应该在你的矩阵中使用dinamically分配你的行内存。在这里你可以找到一个例子。
#include<stdio.h>
#include<stdlib.h>
void cpc(int **x){
int i,j;
for(i=0;i<3;printf("\n"),i++)
for(j=0;j<3;j++)
{
printf("%d ",(*(*(x+i)+j)));
}
}
int main(){
int *a[3];
for (int i=0;i<3;i++)
{
a[i] = malloc(sizeof(int)*3);
for (int j=0;j<3;j++)
a[i][j] = i*3+j;
}
int **b = a;
cpc(b);
return 0;
}
希望这有帮助。