首页 文章

为什么我的指针直接在地址上给出值?

提问于
浏览
0

这是我的代码:

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的值!怎么会发生这种情况?

2 回答

  • 1

    A.matrix 是指向2个指针的指针,每个指针指向2个整数 .
    A.matrix[1] 得到了第二个指针 - 指向2个整数的指针 .
    A.matrix[1][1] 得到了第二个整数 .

  • 0

    当你使用:

    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] 完全有效的代码 .

相关问题