为什么我的指针直接在地址处返回值?
Why is my pointer giving back value at address directly?
这是我的代码:
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语句returns4,也就是所指向的int的值!怎么会这样?
A.matrix
是一个指向2个指针的指针,每个指针指向2个整数。
A.matrix[1]
获取这些指针中的第二个 - 指向 2 个整数的指针。
A.matrix[1][1]
获取这些整数中的第二个。
当您使用时:
int i;
int* p = &i;
或
int* p = malloc(sizeof(int));
p
指向一个整数。
当您使用时:
int array[10];
int *p = array;
或
int *p = malloc(sizeof(int)*10);
p
指向一个包含 10 个整数的数组。
同样,一个变量声明为:
int** mat;
可以指向一个 int*
或一个 int*
数组。
在你的例子中,mat
指向一个包含 2 个 int*
的数组,每个数组指向一个包含 2 个 int
的数组。
这利用了 mat[1][1]
完全有效的代码。
这是我的代码:
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语句returns4,也就是所指向的int的值!怎么会这样?
A.matrix
是一个指向2个指针的指针,每个指针指向2个整数。
A.matrix[1]
获取这些指针中的第二个 - 指向 2 个整数的指针。
A.matrix[1][1]
获取这些整数中的第二个。
当您使用时:
int i;
int* p = &i;
或
int* p = malloc(sizeof(int));
p
指向一个整数。
当您使用时:
int array[10];
int *p = array;
或
int *p = malloc(sizeof(int)*10);
p
指向一个包含 10 个整数的数组。
同样,一个变量声明为:
int** mat;
可以指向一个 int*
或一个 int*
数组。
在你的例子中,mat
指向一个包含 2 个 int*
的数组,每个数组指向一个包含 2 个 int
的数组。
这利用了 mat[1][1]
完全有效的代码。