我写了一个函数,并在这里问了一些问题。它工作得很好,我可以调用它并使用它。但是有些东西让我困惑。这是我刚才提到的函数原型:
void writeToEEPROM( uint8 srcBuf[], uint32 byteCount, int writePtr);
我可以通过发送我的数组来调用此函数,如下所示:
uint8 mysrcBuf[10];
writeToEEPROM(mysrcBuf,10,0); // This is working.
在函数原型中,它得到*srcBuff
,据我所知,*srcBuff
是srcBuff
地址中的值。我的意思是,asteriks(*
)操作数实际上读取了该地址的值,不是吗?但我发送mysrcBuf
,这是数组第一个元素的地址。
如果我声明如下所示的功能,它仍然有效:
void writeToEEPROM( uint8 * srcBuf, uint32 byteCount, int writePtr);
这些陈述是否相同?:
uint8 srcBuf[]
和uint8 * srcBuf
如果我更改声明并以相同方式调用它,它不会警告我或导致问题。
(对不起,如果这个问题有重复。我已经搜索了很多指针。但它有时会让我感到困惑。)
答案 0 :(得分:1)
在你的情况下,
void writeToEEPROM( uint8 srcBuf[], uint32 byteCount, int writePtr);
和
void writeToEEPROM( uint8 *srcBuf, uint32 byteCount, int writePtr);
将相同,因为当数组作为函数参数传递时,它们会衰减到第一个元素的地址。因此,两种表示都可以接收相同的内容。
答案 1 :(得分:-3)
它们是相同的,但uint8 * srcBuf
更准确。