C语言 将 2D 数组转换为双指针失败



初始化二维数组矩阵,如下所示:

#define N 3
...
int matrix[N][N] = {};

矩阵的元素可以按如下方式访问:

for(i=0; i<N; ++i)
{
    for(j=0; j<N; ++j)
        printf("%d ", *(*(matrix + i) + j) );
    printf("n");
}

但是,以下代码失败并出现分段错误

int **matrix_pointer = (int **)matrix;
for(i=0; i<N; ++i)
{
    for(j=0; j<N; ++j)
        printf("%d ", *(*(matrix_pointer + i) + j) );
    printf("n");
}

请解释原因或建议一种有效的替代方法(带有指针)。

如果定义

int matrix[3][5];

添加然后只在 = 运算符的右侧放置 matrix,数组matrix衰减(就像每个数组一样)到它的第一个元素的地址。

matrix的第一个元素是int[5]int[5]的地址是 int(*)[5]

如果"只把matrix放在=运算符的右侧",那么这个赋值操作的左侧应该是int(*)[5]

int (*row)[5] = matrix;

了解上述内容很明显,做

int ** ppi = matrix 

不能正确,因为int **int(*)[5]不同。

它从另一个不同的指针分配给一个指针,会说不兼容的类型。编译器会对此发出警告。

将强制转换应用于右侧表达式以适合左侧,只是告诉编译器关闭。

相关内容

  • 没有找到相关文章