C语言 结构体指针问题请教。

demoxie1 2013-06-22 04:22:15
我有个例程,运行是正确的。但是我不知道result2结果是如何得到的(输出是0x0800 4000,)。
请帮忙解释一下。谢谢,下面为例程:
不好意思,只剩30分了。

typedef struct {uint8_t bytes[1024];} page_tt;

#define FLASH_BASE_PAGE ((page_tt *)0x08000000)
#define BOOTLOADER_SIZE_PAGE (16) // 16page = 16kB

#define APP_BASE_PAGE (FLASH_BASE_PAGE+BOOTLOADER_SIZE_PAGE)

int32_t result;
page_tt * result1;
uint32_t result2;
int main(void)
{
result = *(int32_t *)(APP_BASE_PAGE+4);
result2 = (uint32_t) (FLASH_BASE_PAGE +BOOTLOADER_SIZE_PAGE); // 0x0800 0400
return 0;

}
...全文
150 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-06-24
  • 打赏
  • 举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
u011174551 2013-06-23
  • 打赏
  • 举报
回复
回复要多少字才给积分,新手小白请指教。
demoxie1 2013-06-23
  • 打赏
  • 举报
回复
谢谢各位,终于能理解了。 但是指针都说不能直接用常量赋值的。 如: int *q; q=0x08000000; 这样是不对的。 难道 q=(int *)0x08000000;就可以了? 我看说明一般都是这样赋值的: int i; int *q; a=&i; 没看到过用常量直接赋值的。
hugett 2013-06-22
  • 打赏
  • 举报
回复
首先将宏展开 因为sizeof(page_tt) = 1024 所以result2所指地址就是0x08000000 + BOOTLOADER_SIZE_PAGE * sizeof(page_tt) = 0x08004000
MoonlightDesigner 2013-06-22
  • 打赏
  • 举报
回复
FLASH_BASE_PAGE +BOOTLOADER_SIZE_PAGE 替换一下为((page_tt *)0x08000000) + 16 ((page_tt *)0x08000000)是一个指针,它所控制的大小是1024(也就是+1,相当于加上1024BYTE) 16*1024 = 0x4000
MoonlightDesigner 2013-06-22
  • 打赏
  • 举报
回复
FLASH_BASE_PAGE +BOOTLOADER_SIZE_PAGE 替换一下为((page_tt *)0x08000000) + 16 ((page_tt *)0x08000000)是一个指针,它所控制的大小是1024(也就是+1,相当于加上1024BYTE) 16*1024 = 0x4000

69,382

社区成员

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

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