OpenEdv-开源电子网

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

关于 const 用法说明求教

[复制链接]

51

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2012-5-20
在线时间
0 小时
发表于 2012-7-9 16:10:45 | 显示全部楼层 |阅读模式
 
const u8 table_week[2]={0,1,2};
u8 const table_week[2]={0,1,2};
这有什么区别?
求师兄指教[/mw_shl_code]
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2202
金钱
2202
注册时间
2012-2-8
在线时间
36 小时
发表于 2012-7-9 16:33:26 | 显示全部楼层
在这里是没什么区别的
一般人喜欢写 const u8,但是似乎 u8 const 更符合标准。
但是
u8 const * p;

u8 * const p;
就有区别了,
第一个,const 修饰的是 (*p),也就是说,指针指向的内存是常量,不可以被更改。
第二个,const 修饰的是指针变量 p,也就是说,指针本身是一个常量,不能被重写,比如我有另外一个指针 p2,但是就不可以写 p = p2; 但是 u8 * const p; 这样的定义是不能编译通过的,因为 const 变量必须在定义的时候就初始化。不过 C++ 的类成员变量稍有不同,是在构造函数中初始化。
https://github.com/roxma
回复 支持 1 反对 0

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
发表于 2012-7-9 16:19:32 | 显示全部楼层
不如度娘

http://baike.baidu.com/view/1065598.htm
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165558
金钱
165558
注册时间
2010-12-1
在线时间
2118 小时
发表于 2012-7-9 18:20:25 | 显示全部楼层
我都是const u8这样用的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

51

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2012-5-20
在线时间
0 小时
 楼主| 发表于 2012-7-12 07:46:23 | 显示全部楼层
回复【3楼】Pony279:
---------------------------------
您好 那么在LCD的程序显示中,LCD_ShowString(U8 X,U8 Y,CONST U8 *P)
那么在显示上如果LCD_ShowString(60,130,"Mini")这样的话,现在的P相当于指向字符串Mini的首地址,在LCD_ShowString(U8 X,U8 Y,CONST U8 *P)
程序内有p++;那么指针变量可变,但是此时P变化,*P不是也变化吗,那么并不是按照您说的*P是常量了啊 求您指教



我自己又想了一下 ,您的意思说指针指向的内存是常量,表示的是否是,固定地址的P对应的常量,不能被修改。
比如P现在是指向字符串mini的首地址,那么此时首地址*p=M,P可以变,可有P=P2,但是*P2不能赋值给此时的*P,因为首地址对应的是常量。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165558
金钱
165558
注册时间
2010-12-1
在线时间
2118 小时
发表于 2012-7-12 08:57:25 | 显示全部楼层
回复【5楼】beisiqiu:
---------------------------------
p++是指针地址偏移,不是*p发生变化.
你还要好好学学指针,多用用,多仿真,方能正确使用.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
发表于 2014-7-24 16:28:07 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥  问下    u8 * const table[]={{"1.读出数据"},{"2.显示数据"}};这里面的这个const是修饰什么的?我的理解是数组里面的元素,这个数组里面的元素常量字符串的地址,也就是这里面的const是修饰字符串地址的,对吗
合肥-文盲
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165558
金钱
165558
注册时间
2010-12-1
在线时间
2118 小时
发表于 2014-7-24 23:34:22 | 显示全部楼层
回复【7楼】合肥-文盲:
---------------------------------
应该和const u8*一个意思.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
发表于 2014-7-30 11:00:36 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
看上面2楼的解释,  const u8 *  和u8  const *意思一样   前面和u8 * const不一样,
他不是说
u8 const * p; 
和 
u8 * const p; 
有区别, 
第一个,const 修饰的是 (*p),也就是说,指针指向的内存里面存的东西是常量,不可以被更改。 
第二个,const 修饰的是指针变量 p,也就是说,指针p本身是一个常量,不能被重写,但该指针指向的内容可以被修改
合肥-文盲
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165558
金钱
165558
注册时间
2010-12-1
在线时间
2118 小时
发表于 2014-7-30 23:35:18 | 显示全部楼层
回复【9楼】合肥-文盲:
---------------------------------
额,确实.
不过我一直都是const u8*这种类型来定义的.
没仔细研究这个.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
发表于 2014-7-31 12:39:57 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
合肥-文盲
回复 支持 反对

使用道具 举报

29

主题

340

帖子

0

精华

高级会员

Rank: 4

积分
799
金钱
799
注册时间
2013-12-17
在线时间
100 小时
发表于 2014-8-1 08:25:57 | 显示全部楼层
回复【9楼】合肥-文盲:
---------------------------------
c语言深度剖析  关于const有解释, const u8 *  和u8  const *意思一样   前面和u8 * const不一样,都把u8  去了,第一个和第二个一样的 都是const *
 第三个是const*,所以第一个就是指针里面存的东西不能够修改,第二个p本身不不能修改,看const 修饰什么,直接把定义的数据类型去掉再看就一目了然了。
就算有一天梦想成真,而你做好准备了吗?
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
发表于 2014-8-1 13:18:13 | 显示全部楼层
回复【12楼】老虎的菜:
---------------------------------
顶 说的清晰明了   不错不错
合肥-文盲
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-8-2
在线时间
2 小时
发表于 2015-9-12 08:18:50 | 显示全部楼层
*p 是存储的地址空间指向的量  p是存储的地址    const *p 定义的是存储的地址空间指向的量不可变  const p 定义的是存储的地址不可变 *const p就是不可变地址的指针变量回复
---------------------------------
回复 支持 反对

使用道具 举报

0

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2015-10-15
在线时间
39 小时
发表于 2017-2-28 19:17:00 | 显示全部楼层
大家讲的太好,受教了,指针的概念还是要多用才能熟练掌握
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-23 21:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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