[新手园地] M0之疑问篇4--M0的指针问题

[复制链接]
2143|5
 楼主| 呆板书生 发表于 2012-6-15 18:19 | 显示全部楼层 |阅读模式
在51的时候,指针有着丰富的前缀,有code,data, idata pdata, xdata, 通用指针,等等
把这些,再组合函数指针,指针函数之类,概念都让许多初学者晕菜,

到了arm m0的时候,似乎一扫浮云,只有普通型指针(指向RAM中),和常数型(加了const)指针(指向ROM中),

比如,如果你写了一个函数,函数的参数是 char *型,但你调用这个函数,参数const char *型,编译系统肯定说你错,这时候,用强制转换合适吗?

如果不合适,那在string.c 中的大量字符型函数怎么办?
aozima 发表于 2012-6-15 20:15 | 显示全部楼层
呆板书生 这ID真好。

const表示不可修改,如果你要打印一个字符串,那参数肯定是const的,
不然表示函数可能会修改他,那此时,传进来的参数必须是可写的。

库函数中,有很多const的函数,表示他们不会修改传来的数据。
传给他可修改的也不会有问题。

反之则不行。
aozima 发表于 2012-6-15 20:27 | 显示全部楼层
常数型(加了const)指针(指向ROM中)

"指向ROM中"可未必,只是一般的作法,并没有规定,如有些没有ROM的系统中。
john_lee 发表于 2012-6-16 22:51 | 显示全部楼层
比如,如果你写了一个函数,函数的参数是 char *型,但你调用这个函数,参数const char *型,编译系统肯定说你错,这时候,用强制转换合适吗?
呆板书生 发表于 2012-6-15 18:19

对于C,只能用强制转换了,对于C++,可以使用const_cast转换运算符来把const指针类型转换为非const指针类型。
但转换也仅仅是能够保证编译通过而已,而执行逻辑的正确性必须由程序设计者来保证。
 楼主| 呆板书生 发表于 2012-6-18 18:16 | 显示全部楼层
转换也仅仅是能够保证编译通过而已,而执行逻辑的正确性必须由程序设计者来保证


强制转换当然能编译了,在机器上试一下就知道

我问的是,这样的使用强制转换的执行逻辑是否正确,

小时候,我的语文没学好,不好意思
xyz549040622 发表于 2012-6-19 08:20 | 显示全部楼层
个人理解,都强制转换了,在应用者看来,逻辑就是正确的,这个逻辑正确取决于你想要达到什么样的目的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

868

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部