char a[ ]="abcdefghij"; char *q=a; int *p=(int *)a; while(*q) *...
发布网友
发布时间:2024-10-21 02:12
我来回答
共3个回答
热心网友
时间:2024-11-10 17:26
(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"
热心网友
时间:2024-11-10 17:31
while(*q) *q++=*q+1;这段执行玩字符串变为bcdefghijk;
p+=2;这段将指针指向j位置
热心网友
时间:2024-11-10 17:31
q和a指向同一个数组
p为强行转换过来的指针,也指向那个数组
后面开始判断*q的值,然后让*q的值变为*q+1的值,同时,*q自己还要再加1,
后面的就不说了。因为不在循环体内。