uint8 srcBuf []和uint8 * srcBuf

时间:2016-02-09 08:23:59

标签: c arrays pointers

我写了一个函数,并在这里问了一些问题。它工作得很好,我可以调用它并使用它。但是有些东西让我困惑。这是我刚才提到的函数原型:

void writeToEEPROM( uint8 srcBuf[], uint32 byteCount, int writePtr);

我可以通过发送我的数组来调用此函数,如下所示:

uint8 mysrcBuf[10];

writeToEEPROM(mysrcBuf,10,0);  // This is working.

在函数原型中,它得到*srcBuff,据我所知,*srcBuffsrcBuff地址中的值。我的意思是,asteriks(*)操作数实际上读取了该地址的值,不是吗?但我发送mysrcBuf,这是数组第一个元素的地址。

如果我声明如下所示的功能,它仍然有效:

void writeToEEPROM( uint8 * srcBuf, uint32 byteCount, int writePtr);

这些陈述是否相同?:

uint8 srcBuf[]uint8 * srcBuf

如果我更改声明并以相同方式调用它,它不会警告我或导致问题。

(对不起,如果这个问题有重复。我已经搜索了很多指针。但它有时会让我感到困惑。)

2 个答案:

答案 0 :(得分:1)

在你的情况下,

void writeToEEPROM( uint8 srcBuf[], uint32 byteCount, int writePtr);

void writeToEEPROM( uint8 *srcBuf, uint32 byteCount, int writePtr);

相同,因为当数组作为函数参数传递时,它们会衰减到第一个元素的地址。因此,两种表示都可以接收相同的内容。

答案 1 :(得分:-3)

它们是相同的,但uint8 * srcBuf更准确。