标题: 【问题】关于51指针的程序错误,求解答 [打印本页]

作者: 安好    时间: 2017-2-26 16:37
标题: 【问题】关于51指针的程序错误,求解答

这个是按书上写的程序
*ptrTxd 和 array1[]都是定义成unsigned char型的
但是编译的时候却被警告(ptrTxd = array1;警告错误),并且程序下载到单片机里并没有实现相应的功能


然后我把ptrTxd = array1;改成了ptrTxd =& array1[0];就没有警告了,并且程序的结果是对的。



但是这两种数组元素指针的表达是等价的,都是对的。所以不太明白其中出现了什么问题!
有知道的大神帮忙解答一下吗?谢谢了!





作者: utzuzu    时间: 2017-2-27 15:41
应该是51的C编译器特性,和标准C在编译处理上有很大的差异。
作者: zl2168    时间: 2017-2-27 16:27
本帖最后由 zl2168 于 2017-2-27 16:37 编辑

一般的程序何必一定要用指针?有些单片机教材说:没有掌握指针,就等于没有掌握c语言,真是耸人听闻,令初学者望而生畏。
对一般c语言应用,似乎还有些道理。对c51编程,就没有道理!中小规模应用程序,包括不很复杂的大规模应用程序,不用指针,完全可以应付。例如,张志良编著的《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,一个也未用指针,用数组不是照样实现各种较复杂的功能?原因是什么?因为80C51单片机本身具有间址功能。

作者: pang122    时间: 2017-2-27 16:34
表示我也遇到过这个问题
作者: pang122    时间: 2017-2-27 16:35
表示我也遇到过这个问题
作者: 安好    时间: 2017-3-1 12:09
好像是编译器的问题,同样的把array1强制类型转换(unsigned char *)一样可以,结果也正确。

作者: 安好    时间: 2017-3-1 12:10
utzuzu 发表于 2017-2-27 15:41
应该是51的C编译器特性,和标准C在编译处理上有很大的差异。

嗯嗯,确实。我把array1强制类型转换就对了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1