打印
[新手园地]

M0之疑问篇4--M0的指针问题

[复制链接]
1356|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指针类型。
但转换也仅仅是能够保证编译通过而已,而执行逻辑的正确性必须由程序设计者来保证。

使用特权

评论回复
5
呆板书生|  楼主 | 2012-6-18 18:16 | 只看该作者
转换也仅仅是能够保证编译通过而已,而执行逻辑的正确性必须由程序设计者来保证


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

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

小时候,我的语文没学好,不好意思

使用特权

评论回复
6
xyz549040622| | 2012-6-19 08:20 | 只看该作者
个人理解,都强制转换了,在应用者看来,逻辑就是正确的,这个逻辑正确取决于你想要达到什么样的目的

使用特权

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

本版积分规则

30

主题

868

帖子

2

粉丝