关于一个变量的定义

ddoeddoe 2009-04-17 02:16:01
Uint16 *souraddr;
souraddr = (Uint16 *)0x400000;

在程序里面有这样的变量定义
souraddr是16位地址的,可0x400000 是24位,可以赋值么?
...全文
58 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liaifeilove 2009-04-17
  • 打赏
  • 举报
回复
支持楼上的,补充一下
这种转换在编译器编译的时候就确定下来了.
你如果是16位系统,编译器将会将底16位强制转换,赋给souraddr ,也就是souraddr 指向0地址
paul_chao 2009-04-17
  • 打赏
  • 举报
回复
souraddr 是 指向 16 位地址 的指標 (Pointer), 其大小與機器有關.

在不同的機器上, pointer 的最大值會有所不同, 16-bits CPU, 其值為 0x0000 ~ 0xFFFF, 32-bits CPU, 其值為 0x00000000 ~ 0xFFFFFFFF.

所以本題應為與你的機器 (或曰 compiler) 相關, 不一定.

Paul, Chao @ Techware
ddoeddoe 2009-04-17
  • 打赏
  • 举报
回复
会有什么问题?
一般情况怎么赋值?
还有,我们经常看到: #define EXTINT (*((volatile unsigned char *) 0xE01FC140)) 把一个32位地址转成16位的?
91program 2009-04-17
  • 打赏
  • 举报
回复
可以

但有问题

19,518

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧