我写了一个函数并在这里提出了一些关于它的问题。它工作得很好,我可以调用它并使用它。但有件事让我困惑。这是我刚才提到的函数原型(prototype):
void writeToEEPROM( uint8 srcBuf[], uint32 byteCount, int writePtr);
我可以通过向其发送数组来调用该函数,如下所示:
uint8 mysrcBuf[10];
writeToEEPROM(mysrcBuf,10,0); // This is working.
在函数原型(prototype)中,得到*srcBuff
据我所知,*srcBuff
是地址srcBuff
中的值。我的意思是, asteriks( *
) 操作数实际上读取该地址的值,不是吗?但我正在发送mysrcBuf
这是数组第一个元素的地址。
如果我像下面这样声明函数,它仍然有效:
void writeToEEPROM( uint8 * srcBuf, uint32 byteCount, int writePtr);
这些陈述相同吗?:
uint8 srcBuf[]
和uint8 * srcBuf
如果我更改声明并以相同的方式调用它,它不会警告我或导致问题。
(抱歉,如果这个问题有重复。我已经搜索了很多指针。但有时它仍然让我感到困惑。)
最佳答案
就您而言,
void writeToEEPROM( uint8 srcBuf[], uint32 byteCount, int writePtr);
和
void writeToEEPROM( uint8 *srcBuf, uint32 byteCount, int writePtr);
将相同,因为当数组作为函数参数传递时,它们会衰减到第一个元素的地址。因此,两种表示都可以收到相同的结果。
关于c - uint8 srcBuf[] 和 uint8 * srcBuf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35287084/