gpt4 book ai didi

C++二维数组定义

转载 作者:行者123 更新时间:2023-11-30 00:56:14 25 4
gpt4 key购买 nike

下面有什么问题

int data[2][2] = { {1,1}, {2,2}};
int sum = sum(data, 2);

总和定义为

int sum(int **data, int rows);

data 包含 data[0] 的地址,因此可以将其视为指针。 *data 引导我找到值,这是另一个 int 类型的数组。这个另一个数组应该被视为指向第一个元素的指针。因此,为什么编译器会提示 int **data 的参数?

我收到编译器错误,如下所示。我理解错误,但我的问题是为什么 **data Not Acceptable 。

error: cannot convert int (*)[2] to int** for argument 1 to int sum(int**, int)

最佳答案

无论数组是一维还是多维,都只能转换为指向第一个元素的指针,不能转换为指向指针数组的指针。

要了解原因,请分析数组在内存中的布局方式。

int data[3]
0.......4.......8...... (assume sizeof(int)==4)
data[0] data[1] data[2]
^ &data[0]

int data[3][2]
0..........4..........8..........12.........16.........20........
data[0][0] data[0][1] data[1][0] data[1][1] data[2][0] data[2][1]
^ &data[0][0]

所有元素总是线性排列,因此每个数组(一维或多维)都可以表示为指向第一个元素的指针 (arr[0][0]...[0] ), 仅此而已。多维数组不能表示为指向指针数组的指针,因为那些指针数组不存在于任何地方。

维度只是编译时提示,用于转换为地址(arr[i][j] 变为 *(array_memory + i*H + j))。指向指针的指针是与数组完全不同的结构;索引它在语法上看起来是一样的,但它会导致完全不同的事情发生(ppi[i][j] 变成 *(*(ppi + i) + j)

关于C++二维数组定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10702933/

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