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;
}
...全文
156 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;
}
内容概要:本文围绕城市场景下的无人机三维路径规划问题,提出了一种新颖的多目标粒子群优化算法(NMOPSO),旨在解决高维复杂环境中路径规划面临的多重挑战。研究聚焦于导航变量的多目标优化,构建了一个包含路径长度、飞行安全性、能量消耗等多个相互冲突目标的优化模型,并采用改进的粒子群算法进行高效搜索,最终获得一组Pareto最优解集,为实际决策提供多样化路径选择方案。该方法结合Matlab代码实现,详细阐述了算法的设计机制、数学建模流程及仿真验证过程,充分展示了其在密集城市建筑环境中有效规避障碍物、满足飞行动力学约束并实现多目标权衡的能力,具有较强的工程应用价值。; 适合人群:具备一定优化算法理论基础和Matlab编程能力,从事无人机路径规划、智能交通系统、自动化控制、人工智能应用等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于城市环境中的无人机物流配送、巡检监控、应急救援等实际任务的三维路径规划;②为高维、非线性、多约束的多目标优化问题提供有效的算法设计思路与改进参考;③通过Matlab仿真平台复现算法,进一步开展性能测试、参数调优与算法对比研究,推动相关领域的技术创新。; 阅读建议:此资源强调算法原理与工程实践的深度融合,建议读者重点研读目标函数的构建方式、约束条件的处理策略以及NMOPSO算法的核心改进机制,并务必动手运行和调试所提供的Matlab代码,以深入理解算法在三维空间路径优化中的具体实现细节与实际表现。

70,039

社区成员

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

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