gpt4 book ai didi

c - 将指针传递给具有定义大小的 3D 数组

转载 作者:行者123 更新时间:2023-11-30 17:18:50 25 4
gpt4 key购买 nike

我正在创建一个简单的游戏,其中有一个棋盘,我将其传递给许多函数来更改其值。现在我正在这样做:

void play(int board[2][HEIGHT][WIDTH]);

其中 HEIGHT 和 WIDTH 均使用 define 定义。

我可以(应该)如何简化它?我在某处读到,像这样简化它并不是一个好方法:void play(int*** board),尽管我传递的总是具有完全相同的大小。

最佳答案

在函数参数中,您可以省略多维数组的第一维的长度。因此

void play(int board[2][HEIGHT][WIDTH]); 

相当于

void play(int board[][HEIGHT][WIDTH]);  

您还应该知道编译器会发生变化

void foo(int arr[]);

void foo(int *arr);  

arr 实际上是指向传递的数组的第一个元素的指针。请注意,传递的数组元素的类型为 int
现在考虑您的情况,传递的数组元素的类型为 int [HEIGHT][WIDTH] ,即二维数组。因此,board将成为一个指向int [HEIGHT][WIDTH]类型的二维数组的指针。

void play(int (*board)[HEIGHT][WIDTH]);  

函数调用就像这样

play(board);  

I read somewhere that it is not a good approach to simplify it like that: void play(int*** board), though what I am passing will always have exactly the same size.

是的。这是真的。这是因为 int ***int (*)[HEIGHT][WIDTH] 的类型不同,这意味着它们不兼容。

关于c - 将指针传递给具有定义大小的 3D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29065037/

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