char a[ ]="abcdefghij"; char *q=a; int *p=(int *)a; while(*q) *q++=*q+1; p+=2; printf("%s",p);

答案上机调了,我不想知道结果,想知道结果是怎么来的,说的具体清楚点最好... 答案上机调了,我不想知道结果,想知道结果是怎么来的,说的具体清楚点最好 展开
 我来答
snowboy_snow
2011-10-08 · TA获得超过182个赞
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:116万
展开全部
(1)先看一下初始状态
char a[ ]="abcdefghij";
char *q=a;
int *p=(int *)a;
可以得到如下这样的内容
q是指向字符的指针, 其每次递增/减单位是一个字符,q初始指向 "abcdefghij"的头一个字符'a'
p是指向整型变量的指针,其每次递增/减单位是四个字符,p初始指向 "abcdefghij"的头一个字符'a'

(2) 分析 while(*q) *q++=*q+1;
这个语句的意思是 " 循环处理使 q 当前指向的内容在数值上增加1"
直到q指向的内容是 0 就退出循环。
可以看到每次将q的指针增加1,q的指向就向"abcdefghij"的末尾移动, 因为这是一个常量字符串,所以它的末尾实际上包括一个未显示的'\0'标记,标示字符串的结尾,所以,当q指向这个'\0'标示时,while循环就会结束。
注意: '\0'=NULL=0
当这个循环结束后,q指向是字符串结尾,即'\0'.而在q移动的过程中, q指向的内容都被加了1,即
字符串"abcdefghij" 中的每一个字符都加了1,所以 'a' 变成了'b', 'b'变成了'c' ,依此类推。
最后字符串变成了 "bcdefghijk"
(3) p+=2
将p的指针增加2
由于p是指向整型的,指针增加/减少1, 它将移动四个字节,加2则移动8个字节
p+=2后,p指向实际为 'j'
(4) printf("%s",p);
从p的指针所指的地址开始打印内存中的字符,直到遇到'\0'为止,
所以,打印的字符串为 "jk"
sxsy556
2011-10-08 · TA获得超过1284个赞
知道小有建树答主
回答量:1037
采纳率:0%
帮助的人:651万
展开全部
q和a指向同一个数组
p为强行转换过来的指针,也指向那个数组
后面开始判断*q的值,然后让*q的值变为*q+1的值,同时,*q自己还要再加1,
后面的就不说了。因为不在循环体内。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雪写江山
2011-10-08 · 超过35用户采纳过TA的回答
知道答主
回答量:111
采纳率:0%
帮助的人:102万
展开全部
while(*q) *q++=*q+1;这段执行玩字符串变为bcdefghijk;
p+=2;这段将指针指向j位置
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式