c - 获取对二维数组中行的引用的正确方法

标签 c

我已经多次尝试找到这个问题的答案,但我认为我的搜索措辞不佳,但我很难理解这个问题。我想离开 C 的时间太长了。

我有一个编译时声明的 2D 缓冲区:

uint8_t buffers[NUM_BUFS][SIZE_BUF];

这应该是 NUM_BUFS 大小等于 SIZE_BUF 正确吗?我将其可视化为 NUM_BUFS 行和 SIZE_BUF 列。

现在我想做两件事:

  1. 获取对单行的引用以提供函数
  2. 从行引用中获取对行中单个元素的引用。

这是我尝试过的:

从指针的角度来看:

uint8_t* row = *(buffers + SIZE_BUF*rowIDX);

uint8_t element = *(row + elementIDX);

这可以很好地编译,但很麻烦。

从数组访问的角度来看:

uint8_t* row = &buffers[rowIDX];

uint8_t element = row[elementIDX];

当我试图将一行传递给一个将访问其元素的函数时,这给了我一个编译器警告:passing argument 1 of 'someFunc' from incompatible pointer type [enabled by default]

还有一条信息语句:预期为“uint8_t *”但参数类型为“uint8_t (*)[515]”

someFunc 声明为: void someFunc(uint8_t* row, uint16_t len);

我将不胜感激一些帮助,了解执行此操作的标准方法是什么,以及是否有一种方法具有数组括号的可读性。

最佳答案

这应该有效:

void someFunc(uint8_t *ptr)
{
}

用这个:

uint8_t buffers[NUM_BUFS][SIZE_BUF];
uint8_t* row = buffers[rowIDX];
uint8_t element = row[elementIDX];
someFunc(row);

关于c - 获取对二维数组中行的引用的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25071180/

相关文章:

c - 传递字符数组的指针

c - 使用向后 for 循环替换 C 中字符串的结尾

java - 使用java解密OpenSSL加密数据

objective-c - Perlin 噪声 : I have the source code, 现在是什么?

c - 如何在 64 位机器上构建 32 位 (i386) .deb?

objective-c - NetBeans 无法识别 Makefile.am

c - 打包成员地址 : Disable for specific function?

c - 请解释一下这个素数生成器代码是如何工作的(C语言)

c - Fgets 从文件直到行尾

c - 在 Code Blocks IDE 中收到错误消息 "expected identifier or ' )' before ' }' token"