[菜鸟求助]达人帮我看下这段C语言代码什么意思啊?

fisherofsmea 2007-09-12 09:59:06
main()
{
char *p="abcdefgh",*r;
long *q;
q=(long *)p;
q++;
r=(char *)q;
printf("%s\n",r);
}

运行结果:efgh

从q=(long *)p;这句开始,就看不懂了。这是啥意思啊?

达人请指教!谢谢!
...全文
111 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
danyajuan 2007-10-29
  • 打赏
  • 举报
回复
就是类型转换和指针的操作
ddff12 2007-09-12
  • 打赏
  • 举报
回复
main()
{
char *p="abcdefgh",*r; //声明p为字符串指针指向位置是a所在内存地址
long *q; //长整型的指针q,每移动一次就要向前或向后移动sizeof(long)大小的内存单元
//long型大小为4
q=(long *)p; //让long型指针q指向p所指内存位置,即a所在内存地址,这里用了强制转换
q++; //q向前移动一相当于在内存上走4字节(long型的尺寸为4),这样q就指向了e所在
//的内存地址
r=(char *)q; //让char型指针指向q所指的内存地址,即e所在的地址处
printf("%s\n",r); //输出r所指的内存处所有字符型数据,%s即为输出字符串,结果为efgh
}
kawenmai 2007-09-12
  • 打赏
  • 举报
回复
q=(long *)p; /*将P强行转换成long格式*/
q++; /*在long的格式下,q指针+1.注意的是1个long占用4个字节
的内存所以+1就是指针跳了4个字节.*/
r=(char *)q; /*强行转回字符格式*/
printf("%s\n",r); /*打印,这是指针跳了4个,所以指向e了.*/
fisherofsmea 2007-09-12
  • 打赏
  • 举报
回复
多谢!
Treazy 2007-09-12
  • 打赏
  • 举报
回复
main()
{
char *p="abcdefgh",*r;
long *q;
q=(long *)p; //这里将p强制转换为指向long类型的指针,并将指针赋给q
//long类型是4个字节
q++; //q指向e
r=(char *)q; //把q强制转换为指向char类型的指针,并将指针赋给r
//char是1个字节,r指向e
printf("%s\n",r);//输出efgh
}

69,377

社区成员

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

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