通用指针*p存放结构

qweworld 2011-03-01 10:24:57
在单片机中通用指针*p的存放结构是什么样的,三个字节的存放指针的地址空间里面都是什么内容,例如物理地址0xC00000,如果指针指向这个地址,那么存放此通用指针的三个字节中的内容分别是0xC0,0x00,0x00吗?请具体解释,如能引证更佳.
...全文
143 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qweworld 2011-03-03
  • 打赏
  • 举报
回复
谢谢大家的帮助,我明白了,我这就发分!
qq120848369 2011-03-02
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int main()
{
int *p=(int*)0xabcdefff;
int* *q=&p;
unsigned char *a=(unsigned char*)q;

for(int i=0;i<4;++i)
{
cout<<hex<<(int)a[i]<<endl;
}

return 0;
}


测试代码,结果:

ff
ef
cd
ab
请按任意键继续. . .
赵4老师 2011-03-02
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
赵4老师 2011-03-02
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
delphiwcdj 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pengzhixi 的回复:]

额,对LZ的意思还不是很理解.
给一个你这样的例子
假设你指针p占据0x0000,0x0001,0x0002,0x0003这四个字节。那么如果想将0xc0 00 00 00这个地址存放在那四个字节里面,对于小端来说那么0x0000这个字节会存放 00 0x0001存放00 0x0002存放00,0x0003存放c0。对于大端来说则相反。0x0000这个字节存放c0
[/Quote]
一句话:
little-end: 低字节放在低地址处
big-end: 低字节放在高地址处
intel的cpu是little-end
qq120848369 2011-03-02
  • 打赏
  • 举报
回复
char* *q=(char**)(p); cout«hex«q[0]«q[1]«q[2]«q[3]«endl; 你自己试试吧。
喜欢简单 2011-03-02
  • 打赏
  • 举报
回复
要考虑你所使用的单片机 是使用大端还是小端模式
pengzhixi 2011-03-02
  • 打赏
  • 举报
回复
额,对LZ的意思还不是很理解.
给一个你这样的例子
假设你指针p占据0x0000,0x0001,0x0002,0x0003这四个字节。那么如果想将0xc0 00 00 00这个地址存放在那四个字节里面,对于小端来说那么0x0000这个字节会存放 00 0x0001存放00 0x0002存放00,0x0003存放c0。对于大端来说则相反。0x0000这个字节存放c0
wbcuc 2011-03-02
  • 打赏
  • 举报
回复
存放指针的地址空间也就是把指针当成一般的数据存放到地址空间中,存放的格式与大小端有关,大端就是把MSB放到低地址中,而小端正相反,把LSB放到低地址,在Intel的处理器中,采用的是小端模式,即:

地址偏移 小 端 大 端
0x00 0x00 0xC0
0x01 0x00 0x00
0x02 0xC0 0x00

[Quote=引用楼主 qweworld 的回复:]
在单片机中通用指针*p的存放结构是什么样的,三个字节的存放指针的地址空间里面都是什么内容,例如物理地址0xC00000,如果指针指向这个地址,那么存放此通用指针的三个字节中的内容分别是0xC0,0x00,0x00吗?请具体解释,如能引证更佳.
[/Quote]
hslinux 2011-03-02
  • 打赏
  • 举报
回复
一个指针的大小,在单片机上面也应该就是一个int的大小。
至于地址值在内存中怎么存放,就需要考虑big-endian与little-endian的问题了。
AnYidan 2011-03-02
  • 打赏
  • 举报
回复
指针变量也是变量,即一个可以存储数据的内存空间,只不过指针变量的内存空间存储的是一个地址(编译器将其解释为地址),而大于一个 byte 的空间中的数据如何排列,要看你的计算机架构是大尾端还是小尾端(上网搜索一下)
liutengfeigo 2011-03-01
  • 打赏
  • 举报
回复
大小端.

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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