c - uint8 srcBuf[] 和 uint8 * srcBuf

标签 c arrays pointers

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

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

我可以通过向其发送数组来调用该函数,如下所示:

uint8 mysrcBuf[10];

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

在函数原型(prototype)中,得到*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);

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

关于c - uint8 srcBuf[] 和 uint8 * srcBuf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35287084/

相关文章:

c++ - 为什么当 typedef const 指针与 extra const 一起使用时编译器不报错?

memory-management - Windows 任务管理器列 - 句柄

c - Careercup 提出的一个关于字节序的问题

javascript - Javascript 中的 array.push 不起作用

c - 如何拆分多行字符串并将它们存储到C中的json数组中

java - 数组 - 检查对象是否是数组

arrays - 在 Swift 中展平多个数组的所有值

c - 在函数中使用 scanf 输入更新数组元素(使用指针访问)

c - 拼命寻找我的指针问题的答案

可以直接获取 "stack"中间的元素吗?