我已经多次尝试找到这个问题的答案,但我认为我的搜索措辞不佳,但我很难理解这个问题。我想离开 C 的时间太长了。
我有一个编译时声明的 2D 缓冲区:
uint8_t buffers[NUM_BUFS][SIZE_BUF];
这应该是 NUM_BUFS
大小等于 SIZE_BUF
正确吗?我将其可视化为 NUM_BUFS
行和 SIZE_BUF
列。
现在我想做两件事:
- 获取对单行的引用以提供函数
- 从行引用中获取对行中单个元素的引用。
这是我尝试过的:
从指针的角度来看:
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/