【发布时间】:2015-02-25 23:02:33
【问题描述】:
这是我的代码:
typedef struct {
int** matrix;
int rows;
int cols;
}intMat;
intMat create_intMat(int rows,int cols,int matrix[rows][cols]){
intMat A;
A.rows = rows;
A.cols = cols;
int** mat;
mat = malloc(A.rows*sizeof(int*)); // Pointer for matrix rows
for(int i=0;i<A.rows;i++) mat[i] = malloc(A.cols*sizeof(int)); // Pointer of each matrix row to a matrix column
for (int i=0;i<A.rows;i++){
for (int j=0;j<A.cols;j++){
mat[i][j]=matrix[i][j];
}
}
A.matrix = mat;
return A;
}
int main() {
int mat[2][2] = {{1,2},{3,4}};
intMat A;
A = create_intMat(2,2,mat);
printf("%d\n",A.matrix[1][1]);
return 0;
}
我是指针的初学者,并从另一个论坛获得了代码的指针部分。不过,我不明白。 int** mat 是一个指向 int 的指针,所以如果我按原样调用它,那么它应该给我返回乱码地址,而不是指向的 int。但是,printf 语句返回 4,这是所指向的 int 的值!这是怎么回事?
【问题讨论】:
-
实际上,您通过使用
[]运算符将其取消引用两次。请记住,a[b]被定义 等同于*(a+b),因此当您编写mat[1][1]时,您正在执行*(*(mat+1)+1),正如您所看到的,它取消引用mat两次,得到从int **到int。 -
@MatteoItalia -- 您应该考虑将其发布为答案而不是评论。