TC学习记录之——指针,变量,数组,程序段地址、堆栈段地址与偏移的关系

cxdzxc 2012-04-25 10:08:28
#include<stdio.h>
int main(void)
{
long int bl=0x12345678;
int sz[2],*ls1,*ls2,*ls3,huge *main_add=main,far *sz_add=sz,far *bl_add=bl;
system("cls");
printf("&main=0x%x &sz_add=0x%x &bl_add=0x%x\n",&main,&sz_add,&bl_add);
ls1=&main_add;/*取得far main_add指针基地址,低位两字节为偏移量*/
ls2=&sz_add;
ls3=&bl_add;
printf("&main_add=0x%x &sz_add=0x%x bl_add=%x\n",&main_add,&sz_add,&bl_add);
printf("main_add_0x%x=ip=0x%x main_add_0x%x=cs=0x%x \nsz_add_0x%x=sp=0x%x sz_add_0x%x=ss=0x%x \nbl_add_0x%x=0x%x bl_add_0x%x=0x%x \n",ls1,*ls1,ls1+1,*(ls1+1),ls2,*ls2,ls2+1,*(ls2+1),ls3,*ls3,ls3+1,*(ls3+1));
/*ls+1——指针地址+1(注意在TC中,int指针地址是以2字节作为一个计算单位的)得到far main_add指针的高位字节,即可取得段地址*/
getch();
return 0;
}
...全文
126 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏天__ 2012-04-25
  • 打赏
  • 举报
回复
楼主想表达什么意思i?
cxdzxc 2012-04-25
  • 打赏
  • 举报
回复
注释位置不对,改下:

#include<stdio.h>
int main(void)
{
long int bl=0x12345678;
int sz[2],*ls1,*ls2,*ls3;
int huge *main_add=main,far *sz_add=sz,far *bl_add=bl;
system("cls");
printf("&main=0x%x ",&main);
printf("&sz_add=0x%x ",&sz_add);
printf("&bl_add=0x%x\n",&bl_add);
ls1=&main_add;/*取得far main_add指针基地址,低位两字节为偏移量*/
ls2=&sz_add;
ls3=&bl_add;
printf("&main_add=0x%x ",&main_add);
printf("&sz_add=0x%x ",&sz_add);
printf("bl_add=%x\n",&bl_add);
printf("main_add_0x%x=ip=0x%x main_add_0x%x=cs=0x%x\n",ls1,*ls1,ls1+1,*(ls1+1));
/*ls+1——指针地址+1(注意在TC中,int指针地址是以2字节作为一个计算单位的)得到far main_add指针的高位字节,即可取得段地址*/
printf("sz_add_0x%x=sp=0x%x sz_add_0x%x=ss=0x%x\n",ls2,*ls2,ls2+1,*(ls2+1));
printf("bl_add_0x%x=0x%x bl_add_0x%x=0x%x\n",ls3,*ls3,ls3+1,*(ls3+1));
getch();
return 0;
}
cxdzxc 2012-04-25
  • 打赏
  • 举报
回复
有人说代码风格不好,接受建议,改进下:

#include<stdio.h>
int main(void)
{
long int bl=0x12345678;
int sz[2],*ls1,*ls2,*ls3;
int huge *main_add=main,far *sz_add=sz,far *bl_add=bl;
system("cls");
printf("&main=0x%x ",&main);
printf("&sz_add=0x%x ",&sz_add);
printf("&bl_add=0x%x\n",&bl_add);
ls1=&main_add;/*取得far main_add指针基地址,低位两字节为偏移量*/
ls2=&sz_add;
ls3=&bl_add;
printf("&main_add=0x%x ",&main_add);
printf("&sz_add=0x%x ",&sz_add);
printf("bl_add=%x\n",&bl_add);
printf("main_add_0x%x=ip=0x%x main_add_0x%x=cs=0x%x\n",ls1,*ls1,ls1+1,*(ls1+1));
printf("sz_add_0x%x=sp=0x%x sz_add_0x%x=ss=0x%x\n",ls2,*ls2,ls2+1,*(ls2+1));
printf("bl_add_0x%x=0x%x bl_add_0x%x=0x%x\n",ls3,*ls3,ls3+1,*(ls3+1));
/*ls+1——指针地址+1(注意在TC中,int指针地址是以2字节作为一个计算单位的)得到far main_add指针的高位字节,即可取得段地址*/
getch();
return 0;
}

69,377

社区成员

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

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