大家好,
我知道这个问题已经讨论了很多,但我仍然找不到我需要的东西。我对 C 还很陌生,但仍然对指针很感兴趣,即指向多维数组的指针。
我查看了诸如 int a[2][3]; 之类的示例; int (*p) = a
当a是一个二维数组时,但是括号有什么作用呢?
我正在创建一个程序,其中有一个二维数组作为变量,它需要将该数组传递给外部函数来修改它。
我的数组是这样初始化的:
无符号整数节点[3][2]={ {PINB,PINC}, {0,0}, {0,0} };
我相信最好的方法是通过指针,但我不知道如何为接收二维数组的函数设置原型(prototype)。
这是我将其传递给的函数以及我如何调用它:
NodeToMIDI(节点, i, pMIDIdata);
这是它的原型(prototype)://其中“node_pointer”是二维数组参数。
void NodeToMIDI(unsigned int node_pointer, unsigned int node_select, unsigned int * MidiPacket);
有人可以解释一下如何执行此操作背后的语法和逻辑吗?我看过的其他一些线程的语法对我来说是未知的。如int ** a
为例。
感谢您的帮助! 安德鲁。
最佳答案
只有当您知道(在编译时)内部数组的大小时,您才能自然地传递数组以使其发挥作用。
你看到的例子可能是int a[2][3]; int (*p)[3] = a
。括号表示 p
是指向 3 个 int 数组的指针,而不是 3 个 int 指针数组。由于您可以像数组一样取消引用指针,因此您可以将 p
用作 3 个 int 数组的数组(即 a
)。
以同样的方式,您可以编写类似 void myfunc(int (*arr)[3]);
的原型(prototype) - 如果将 a
传递给此函数,这与将数组传递给获取指针的函数完全相同。
这个原型(prototype)还有另一种写法:void myfunc(int arr[][3]);
- 编译器也会以同样的方式理解它,有些人觉得这样写更容易理解.
关于c - 设置指向二维数组的指针,然后将该指针传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9413633/