This question already has answers here:
What is array decaying?
(9个答案)
4年前关闭。
我已经编写了一个函数,并在此询问了一些问题。它工作得很好,我可以调用它并使用它。但是有些事情使我困惑。这是我刚才提到的函数原型:
我可以通过向其发送数组来调用此函数,如下所示:
在函数原型中,它得到
如果我声明如下函数,它仍然可以工作:
这些陈述是否相同?:
如果我更改声明并以相同的方式调用它,它不会警告我或引起问题。
(很抱歉,这个问题是否重复。我已经搜索了很多指针。但是有时它仍然使我感到困惑。)
和
就像将数组作为函数参数传递时一样,它们会衰减到第一个元素的地址。因此,两种表示形式都可以接受相同的表示。
(9个答案)
4年前关闭。
我已经编写了一个函数,并在此询问了一些问题。它工作得很好,我可以调用它并使用它。但是有些事情使我困惑。这是我刚才提到的函数原型:
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
如果我更改声明并以相同的方式调用它,它不会警告我或引起问题。
(很抱歉,这个问题是否重复。我已经搜索了很多指针。但是有时它仍然使我感到困惑。)
最佳答案
就你而言
void writeToEEPROM( uint8 srcBuf[], uint32 byteCount, int writePtr);
和
void writeToEEPROM( uint8 *srcBuf, uint32 byteCount, int writePtr);
就像将数组作为函数参数传递时一样,它们会衰减到第一个元素的地址。因此,两种表示形式都可以接受相同的表示。
09-11 18:05