This question already has answers here:
What is array decaying?
                                
                                    (9个答案)
                                
                        
                                4年前关闭。
            
                    
我已经编写了一个函数,并在此询问了一些问题。它工作得很好,我可以调用它并使用它。但是有些事情使我困惑。这是我刚才提到的函数原型:

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

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

(很抱歉,这个问题是否重复。我已经搜索了很多指针。但是有时它仍然使我感到困惑。)

最佳答案

就你而言

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




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


就像将数组作为函数参数传递时一样,它们会衰减到第一个元素的地址。因此,两种表示形式都可以接受相同的表示。

09-11 18:05