gpt4 book ai didi

将二维数组转换为双指针失败

转载 作者:行者123 更新时间:2023-11-30 19:32:43 24 4
gpt4 key购买 nike

按如下方式初始化二维数组矩阵:

#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];

add 然后将 matrix 放在 = 运算符的右侧,数组 matrix 衰减(就像每个数组都会做的那样)它的第一个元素的地址。

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

如果“矩阵放在=-运算符的右侧”,则该赋值操作的左侧预计为是一个int(*)[5]:

int (*row)[5] = matrix;
<小时/>

理解了上面的内容就很明显了

int ** ppi = matrix 

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

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

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

关于将二维数组转换为双指针失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46754856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com