gpt4 book ai didi

c++ - 将 int** 转换为 "pointer to a two-dimensional array of integers with fixed number of elements per column"

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:28 24 4
gpt4 key购买 nike

假设有一个 int** 类型的变量,它是指向 5x5 二维数组的指针:

int** ptr_array_5by5;

和一个具有以下原型(prototype)的函数:

void print2DArray_with5Columns(int (*ptr_row)[5]);

有没有办法将 ptr_array_5by5 转换为某种类型,以匹配函数第一个参数的类型?

print2DArray_with5Columns( (<some casting type>) ptr_array_5by5)

最佳答案

这里要认识到的重要一点是 int** 不是指向任何二维数组的指针。它是一个指向 1D 的指针指针数组。 int (*)[5] 是一个指向二维数组的指针int(或者更准确地说,它是指向第一个元素的指针这样的数组)。您几乎可以转换任何指针类型使用 reinterpret_cast 到任何其他指针类型,但它是也几乎可以保证不会在运行时工作。 (有特殊异常(exception),但它们都是特定于平台的,并且非常接近硬件。)

如果你真的有一个 int** 指向 5 个 int*,每个它指向 5 int,你需要一个 int (*)[5],唯一的您将能够成功转换的方法是对实际基础数据的转换(这将涉及一个拷贝),而不是对指针的转换。像这样的东西:

int tmp[5][5];
for ( int i = 0; i != 5; ++ i ) {
int* row = ptr_array_5by5[i];
for ( int j = 0; j != 5; ++ j ) {
tmp[i][j] = row[j];
}
}

然后您可以将 tmp 传递给您的函数而无需任何转换:数组到指针的隐式转换将转换int [5][5]int (*)[5]

关于c++ - 将 int** 转换为 "pointer to a two-dimensional array of integers with fixed number of elements per column",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24165572/

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