2016-02-09 29 views
-1

我已经写了一个函数,并在这里问了一些关于它的问题。它工作得很好,我可以调用它并使用它。但有些事情让我头脑混乱。这是我刚才提到的函数原型:uint8 srcBuf []和uint8 * srcBuf

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

我可以通过发送我的数组分配给它,像这样调用这个函数:

uint8 mysrcBuf[10]; 

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

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

如果我宣布类似下面的功能,它仍然有效:

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

难道这些语句相同?:

uint8 srcBuf[]uint8 * srcBuf

它不提醒我,或者我会出现问题更改声明并以相同的方式调用它。

(很抱歉,如果有这个问题的一个副本。我已经搜索指针很重要,但它仍然让我困惑的时候。)

+1

您是否在发布之前进行搜索? – trojanfoe

+1

请参阅[差异之间的阵列和数组指针功能在C](http://stackoverflow.com/questions/5573310/difference-between-passing-array-and-array-指针功能在C) –

+1

相关:[数组和指针通过一个实际的例子之间的异同](http://stackoverflow.com/questions/1782369)。 – DevSolar

回答

-3

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

1

在你的情况,

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

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

相同,当数组被作为函数参数传递,它们衰变到所述第一元件的地址。所以,这两个表示都可以接受。

+0

当然应该是'const uint8 *'? – trojanfoe

+0

@trojanfoe应该但不是必须的吗? :) –

+0

我说“应该”不是吗?你没有看到'const'的好处,并将这个好处传达给OP? – trojanfoe