OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2613|回复: 4

有一个关于const的小问题

[复制链接]

15

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-9-22
在线时间
26 小时
发表于 2016-10-29 16:21:09 | 显示全部楼层 |阅读模式
1金钱
定义一个数组
u8  TEXT_BUFF[]={"Explorer STM32F4 IIC TEST"} ;

如果有一个函数 型如
void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite)
{
        while(NumToWrite--)
        {
                AT24CXX_WriteOneByte(WriteAddr,*pBuffer);
                WriteAddr++;
                pBuffer++;
        }
}

调用的时候 AT24CXX_Write(0,TEXT_Buffer,SIZE);没有问题;


但是 如果定义数组  const  u8  TEXT_BUFF[]={"Explorer STM32F4 IIC TEST"} ;
调用的时候 AT24CXX_Write(0,TEXT_Buffer,SIZE);就会警告甚至报错,必须改成
AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);才行

请问这是为什么? const不是修饰变量不能变化吗 ?不是很理解



最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-9-22
在线时间
26 小时
 楼主| 发表于 2016-10-29 16:21:10 | 显示全部楼层
xianshasaman 发表于 2016-10-29 23:10
形参带const,实参不带const,这样是不报错的;
形参带const,实参也带const。这样是不报错的;
形参不带 ...

真心有用  十分感谢啊
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-10-29 16:32:16 | 显示全部楼层
声明中的类型,与实际传入参数类型不相同,编译器就会报警.经过强换后,编译器就知道了.可能这些编译器不够智能吧.有点机械.
新出来的新型编译器 ,函数已经可以不用声明了.
回复

使用道具 举报

15

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-9-22
在线时间
26 小时
 楼主| 发表于 2016-10-29 16:42:16 | 显示全部楼层
操作系统 发表于 2016-10-29 16:32
声明中的类型,与实际传入参数类型不相同,编译器就会报警.经过强换后,编译器就知道了.可能这些编译器不够智 ...

新的编译器? 加上const修饰的变量和不加const的 存放位置不一样  但是不是意味着类型不一样?u8 pBuffer和 const u8 pBuff不都是u8的数据吗  一个可以改变的变量  一个不能改变的变量   这样说来编译器真的是不够智能   我试着在函数主题加上了const  然后就不需要强制转化了

感谢你
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2016-10-29 23:10:45 | 显示全部楼层
形参带const,实参不带const,这样是不报错的;
形参带const,实参也带const。这样是不报错的;
形参不带const,实参带const,这样就报错。
你也可以试试第一种用法。在某些场合比较有用。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 16:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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