c - 设置指向二维数组的指针,然后将该指针传递给函数

标签 c arrays pointers parameter-passing

大家好,

我知道这个问题已经讨论了很多,但我仍然找不到我需要的东西。我对 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/

相关文章:

c++ - 为什么打包结构的大小在这里是 5 而不是 4 字节?

java - java.lang.ArrayIndexOutOfBoundsException:MapReduce

c++ - 双重自由或腐败(fasttop)——C++

c - 在 C 中处理 bmp 文件时,为什么 fopenf_s 会将文件指针初始化为 NULL?

指向 Eigen::Map<Eigen::VectorXd> 对象的 C++ 特征指针

c++ - MSVC Address Sanitizer - 有什么理由在发布版本中使用它吗?

C字符串包含模数

arrays - 重新排列部分之间的单元格

c - HTTP 请求不使用 Winsock 的原因?

PHP mysql : inserting data from an array