打印
[AVR单片机]

新手运用指针,求指教

[复制链接]
816|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wlc824136|  楼主 | 2015-1-17 16:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有两个函数
a.c文件中
uchar *Return_Temp_And_RH_Range(void)/*返回指针,指向温湿度上限缓存数组的首地址*/
{
  uchar *pa;
  pa=Data[0];
  return pa;
}
b.c文件中
void EEPROM_Write_String(uint add,uchar *pa)
{
  uchar i=0;
  CLI();
  for(;i<Write_Data_Num;i++)
   {EEPROM_Write_Byte(add+i,pa[i]);}
  SEI();
}
现在在main.c中调用
EEPROM_Write_String(0x0000,*Return_Temp_And_RH_Range());/*EEPROM保存温湿度上限线数据*/
不能编译。
难道,第一个函数返回的不是一个指针吗?

相关帖子

沙发
wlc824136|  楼主 | 2015-1-17 17:03 | 只看该作者
程序里的指针赋值语句,打错了,改成pa=&Data[0];

使用特权

评论回复
板凳
ddllxxrr| | 2015-1-18 09:40 | 只看该作者
这个是因为你的uchar *Return_Temp_And_RH_Range(void)/*返回指针,指向温湿度上限缓存数组的首地址*/
{
   uchar *pa;
   pa=Data[0];
   return pa;
}

pa是个局部变量,你换全局变量就应好用

使用特权

评论回复
地板
wlc824136|  楼主 | 2015-1-18 21:26 | 只看该作者
ddllxxrr 发表于 2015-1-18 09:40
这个是因为你的uchar *Return_Temp_And_RH_Range(void)/*返回指针,指向温湿度上限缓存数组的首地址*/
{
  ...

是在a.c文件中将pa定义城全局变量吗?貌似还是不行

使用特权

评论回复
5
ddllxxrr| | 2015-1-19 08:14 | 只看该作者
在你调用的函数变为全局,也就是main

使用特权

评论回复
6
john_lee| | 2015-1-20 10:25 | 只看该作者
不是 pa 的问题,而是调用的问题,应该这样:
EEPROM_Write_String(0x0000, Return_Temp_And_RH_Range());

使用特权

评论回复
7
john_lee| | 2015-1-20 10:30 | 只看该作者
定义一个 pa 变量,只是啰嗦了一些,直接返回更简洁:
uchar *Return_Temp_And_RH_Range(void)/*返回指针,指向温湿度上限缓存数组的首地址*/
{
   return Data;
}
当然了,对于优化的编译输出来说,两者的结果是完全一样的。

使用特权

评论回复
8
wlc824136|  楼主 | 2015-1-21 14:51 | 只看该作者
john_lee 发表于 2015-1-20 10:25
不是 pa 的问题,而是调用的问题,应该这样:

果然可以,不过又遇到了一个问题:
a.c文件两个指针返回函数
uchar *Return_Temp_And_RH_Buf(void)
{return Temperature_And_RH_Buf;}
uchar *Return_Temperature_Negative_Flag_Buf(void)
{return Temperature_Negative_Flag_Buf;}
b.c文件
void Relay_Get_Temp_And_RH_Data(uchar *temp_and_rh_data)
{
  uchar i=0;
  for(;i<5;i++)
   {Temp_And_RH_Data=temp_and_rh_data;}
}
void Relay_Get_Temperature_Negative_Flag(uchar *temperature_negative_flag)
{
  uchar i=0;
  for(;i<3;i++)
   {Temperature_Negative_Flag=temperature_negative_flag;}
}
现在调用时
Relay_Get_Temp_And_RH_Data(Return_Temp_And_RH_Buf());
Relay_Get_Temperature_Negative_Flag(Return_Temperature_Negative_Buf());
第一个可以通过,并且运行正确
可第二个就会编译错误:found `int' expected `pointer to unsigned char'
怎么会跑出来int型出来

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

58

帖子

0

粉丝