打印
[51单片机]

关指针的问题

[复制链接]
2136|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
梦想的天空|  楼主 | 2014-12-29 11:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
wangch_sh| | 2014-12-29 11:12 | 只看该作者
为什么这么用?unsigned int *pread不是无符号整形吗?

使用特权

评论回复
板凳
梦想的天空|  楼主 | 2014-12-29 12:10 | 只看该作者
只是举例。我想知道是跳几个字节

使用特权

评论回复
地板
czy90| | 2014-12-29 13:17 | 只看该作者
两个字节地址,pread的属性未变,还是unsigned int型指针。

使用特权

评论回复
5
mcu5i51| | 2014-12-29 14:46 | 只看该作者
指针加减的大小和数据类型有关,编译器是可以识别的;
你的 u char 类型,指针操作时是1,int等类型是2或4,看芯片和编译器,等

使用特权

评论回复
6
mcu5i51| | 2014-12-29 14:47 | 只看该作者
看错了,两个

使用特权

评论回复
7
mcu5i51| | 2014-12-29 14:47 | 只看该作者
注意大小端,否则可能不是你想要的结果

使用特权

评论回复
8
梦想的天空|  楼主 | 2014-12-29 17:22 | 只看该作者
mcu5i51 发表于 2014-12-29 14:47
注意大小端,否则可能不是你想要的结果

再请教一下

变量int  k
指针int  *pl

pl=k; 和 pl=&k, 有什么不同

使用特权

评论回复
9
梦想的天空|  楼主 | 2014-12-29 17:22 | 只看该作者
mcu5i51 发表于 2014-12-29 14:47
注意大小端,否则可能不是你想要的结果

什么是大小端

使用特权

评论回复
10
ayb_ice| | 2014-12-29 17:27 | 只看该作者
强制指针转换类型不对
定义的时候指向uint型,强制转换指向uchar

使用特权

评论回复
评论
zyj9490 2014-12-29 23:37 回复TA
会出一个WARNING 
11
梦想的天空|  楼主 | 2014-12-29 17:40 | 只看该作者
本帖最后由 梦想的天空 于 2014-12-29 17:43 编辑
ayb_ice 发表于 2014-12-29 17:27
强制指针转换类型不对
定义的时候指向uint型,强制转换指向uchar

那这样呢:
如果
变量unsigned char code   k
指针unsigned char code *pl;

pl = (unsigned char code *) k


pl什么结果

使用特权

评论回复
12
梦想的天空|  楼主 | 2014-12-29 18:54 | 只看该作者
继续请教 指针 *pi   我想知道他指向的地址是否超过0x2000  如何操作

使用特权

评论回复
13
ddllxxrr| | 2014-12-29 20:27 | 只看该作者
两个字节没错的,铁板锭钉的事

使用特权

评论回复
14
dreamfantcy| | 2014-12-29 21:23 | 只看该作者
额。。。,这个编译会出错的吧!

使用特权

评论回复
15
zyj9490| | 2014-12-29 23:36 | 只看该作者
pread的数据类型又没有改变了,只不过得到了一个起始地址而已。当然是二个字节。

使用特权

评论回复
16
zyj9490| | 2014-12-29 23:38 | 只看该作者
梦想的天空 发表于 2014-12-29 17:40
那这样呢:
如果
变量unsigned char code   k

给一个出错信息。

使用特权

评论回复
17
梦想的天空|  楼主 | 2014-12-29 23:59 | 只看该作者
已经有答案了,会跳两个字节地址,要想知道是否指针指向的地址是否超过某个值,比如0x20   int *p;
int i = 0;
p = &i;
if(p > 0x20)
{
    printf("");
}

使用特权

评论回复
18
diweo| | 2014-12-30 07:05 | 只看该作者
例子不能乱举的,你举的例子虽然不是完全不能工作,但是肯定是不常见的,逻辑上比较混乱的。
这对你学习,帮助甚微。

使用特权

评论回复
19
ayb_ice| | 2014-12-30 08:08 | 只看该作者
"
unsigned int *pread
pread=(unsigned char  *)k;
"

unsigned int *pread表示指向unsigned int类型,增加1当然是加2,因为unsigned int占用两个字节,pread变量自身保存在默认空间,取决于编译模式

pread=(unsigned char  *)k;表示将K的值强制成(unsigned char  *)类型指针,并将值赋值给pread,显然两边的类型不同,会有警告或错误报告

使用特权

评论回复
20
city520boy| | 2014-12-30 09:18 | 只看该作者
大胆假设,小心求证

使用特权

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

本版积分规则

10

主题

43

帖子

1

粉丝