野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16466|回复: 3

求助!为什么这个指针无法赋值?

[复制链接]
发表于 2018-4-6 19:10:13 | 显示全部楼层 |阅读模式
20火花
本帖最后由 如花 于 2018-4-6 19:21 编辑

程序是这样的:
  1. for (i=0; i<Length; i++)
  2. {
  3.   Data = Send_Receive_Data(Dummy);
  4.   *pData = Data;
  5.   printf("\n 函数中的Data %d = 0x%x, *pData %d = 0x%x", i, Data ,i, *pData);
  6.   pData++;
复制代码
打印Data的值和*pData的值,通过USART显示出来的结果是这样的:
无标题.png


按照常理来说,程序中已经把Data的值赋给了*pData,此时*pData的值应该和Data的值一样是0xff才对。
不知道为什么实际上两个值不一样,而且*pData会显示一些奇怪的数字呢?
会不会是指向错误呢?

完整程序是这样的,不过对解决问题影响不大:
  1. void Read_Data(uint32_t Address, uint8_t* pData, uint32_t Length)
  2. {
  3.   int i;
  4.   uint8_t Addr[3],Data;
  5.         
  6.   GPIO_ResetBits(GPIOF, GPIO_Pin_6);   //拉低片选线,通信开始
  7.         
  8.   Send_Receive_Data(0x03);   //0x03是Read Data的命令(Data Sheet第28页)

  9.   Addr[0] = (Address >> 16) & 0xFF;   //由于是MSB先行,所以Addr[0]是最高的8位
  10.   Addr[1] = (Address >> 8) & 0xFF;
  11.   Addr[2] = Address & 0xFF;
  12.         
  13.   Send_Receive_Data(Addr[0]);
  14.   Send_Receive_Data(Addr[1]);
  15.   Send_Receive_Data(Addr[2]);
  16.         
  17.    for (i=0; i<Length; i++)
  18.    {
  19.      Data = Send_Receive_Data(Dummy);
  20.      *pData = Data;
  21.      printf("\n 函数中的Data %d = 0x%x, *pData %d = 0x%x", i, Data ,i, *pData);
  22.      pData++;
复制代码


最佳答案

查看完整内容

uint8_t* pData 是形参,不可以通过实参来改变它的值
回复

使用道具 举报

发表于 2018-4-6 19:10:14 | 显示全部楼层
uint8_t* pData 是形参,不可以通过实参来改变它的值
回复

使用道具 举报

 楼主| 发表于 2018-4-6 22:50:41 | 显示全部楼层
今天这个SPI Flash已经调了大半天还没调好,还有那个FatFS文件系统,自己写出来也是各种问题,加起来弄了几天没弄好,心里特别崩溃
回复

使用道具 举报

 楼主| 发表于 2018-4-19 11:15:05 | 显示全部楼层
xiaoxiao_er 发表于 2018-4-6 19:10
uint8_t* pData 是形参,不可以通过实参来改变它的值

找到原因了,因为在main函数那里需要先定义一个足够长度的uint8_t数组,就是视频里说的“读取数据缓冲区”,才可以调用Read_Data这个函数,把实参传到这个函数的形参那里进行指针的操作。
我之前在main函数里面定义的pData实参错了,定义成了单个的uint8_t变量而不是一个数组,进行指针操作的时候因为变量长度不够,所以进行pData++的时候就指到变量以外的地址,已经超出变量的范围,所以运算才会出现乱码。
也很感谢你,至少让我知道了形参和实参的概念。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-4 01:51 , Processed in 0.029995 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表