c - 为什么我的指针直接返回地址处的值?

标签 c pointers

这是我的代码:

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.matrix 是一个指向 2 个指针的指针,每个指针指向 2 个整数。
A.matrix[1] 获取这些指针中的第二个 - 指向 2 个整数的指针。
A.matrix[1][1] 获取这些整数中的第二个。

关于c - 为什么我的指针直接返回地址处的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731372/

相关文章:

C++ OpenGL 线框立方体渲染空白

c++ - 条件运算符的奇怪使用

c - 使用 while() 和 sleep() 让程序进入休眠模式的区别

c++ - 带空终止符的指针数组交互

c - 尝试分配一系列数组以包含数组中的名称

c - 通过 void 指针访问各种类型的内存

c - 函数内的数组变量影响c中函数外的数组变量

c++ - 用于 LAN 计算机发现和服务器设置的 UDP 广播

c - 为什么在下面的程序中需要cast?

c - 自定义释放函数是否应该考虑与通用容器的兼容性?