gpt4 book ai didi

c - 在 Objective-C 中前向声明具有已定义数组大小的函数

转载 作者:行者123 更新时间:2023-12-03 02:56:22 27 4
gpt4 key购买 nike

我确信这是一个相当愚蠢的问题,但这确实让我措手不及,可能是我没有正确思考这个问题。我在使用 OpenGL ES 2.0 时遇到了以下代码行

/////////////////////////////////////////////////////////////////
// Forward declarations
static void SceneMeshInitIndices(
GLushort meshIndices[NUM_MESH_INDICES]);
static void SceneMeshUpdateNormals(
SceneMeshVertex mesh[NUM_MESH_COLUMNS][NUM_MESH_ROWS]);
static void SceneMeshUpdateMeshWithDefaultPositions(
SceneMeshVertex mesh[NUM_MESH_COLUMNS][NUM_MESH_ROWS]);

现在,让我措手不及的是,这些函数将其输入声明为具有特定大小的二维数组。我从来没有见过这样做,并且完全不确定它是否合法或者它在 Objective-C 中如何合法。我总是被告知使用指向原始数组的指针并将其传递进去。但这看起来很奇怪。有人可以尝试向我解释这一点或指出我推论的错误吗?

最佳答案

当将数组传递给函数时,它们会根据一组规则衰减为指针。这些是:

一个。第一级间接(即数组的第一个维度/索引)衰减为指针,因此不需要指定(也不需要使用)它的大小。

两个。数组的其他维度保持不变,并且不会衰减为指针。它们需要被指定,并且它们是参数类型的一部分。

这就是为什么本质上以下内容是等效且合法的:

void foo(int arr[]);
void foo(int arr[MAX_ARRAY_SIZE]);
void foo(int *arr);

但以下内容不等同,但合法:

void foo(int arr[MAX_ROWS][MAX_COLUMNS]);
void foo(int **arr);

以下内容同样是等效且合法的:

void foo(int arr[MAX_ROWS][MAX_COLUMNS]);
void foo(int arr[][MAX_COLUMNS]);

(这些被解释为 int (*arr)[MAX_COLUMNS]),即。 e.作为指向数组的指针)。

以下内容是非法的, i。 e.它会生成编译器错误:

void foo(int arr[MAX_ROWS][]);

关于c - 在 Objective-C 中前向声明具有已定义数组大小的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14862860/

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