我正面临一种奇怪的行为。我的C语言知识不足以理解发生了什么。
我在代码生成器工作室使用TI的C编译器(用于CC3220SF)。
就像我通常写的那样,我写了这个函数:

unsigned char rxBuf[512];

void ReadID(unsigned char device[])
{
    // this function reads 2 bytes and put them into
    // the global buffer rxBuf;
    FlashMemory_Read(ID_ADDRESS, 2);
    device = &rxBuf[0];
}

(注意:这里我不传递长度,因为它被设计固定为2)。
我如何使用它:
unsigned char device[2];
ReadID(device);

正如从许多答案中指出的,编译器以同样的方式处理声明为*或[]的参数,其值是指向第一个元素的地址(指针)。
两种意想不到的行为:
编译器警告我在ReadID函数中声明了'device'变量,但从未引用
调试代码时,我注意到在ReadID函数中,设备字节指向rxBuf值,但在调用ReadID()的函数中,它们总是读取0。
这里怎么了,为什么?
预期的行为是,即使ReadID结束,设备变量也应指向rxBuf,因为指针已设置为rxBuf的地址。
相反,似乎地址只在本地更改!

最佳答案

我想所有回答过你问题的人都不能理解你的小问题您在问array中的c为什么下面的代码行不工作?

device = &rxBuf[0];//as you assigning the address of first character to
  //your `device array` its not going to work as device is just a character array and not array pointer

应该像下面这样
*device = rxBuf[0];

要复制多个字符,可以使用如下的for循环。
int i;
for(i=0; i<3; i++){
   *(device + i) = rxBuf[i];
 }

关于c - 将指针传递给函数不会改变其值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47225426/

10-11 22:43
查看更多