字符指针地址问题
#include <stdio.h>void main(void)
{
char *str="abc";
char *ptr=str;
while(*ptr++)
{
printf("%c,%d\n",*ptr,ptr);
}
printf("%d\n%d\n",str,ptr);
}
在这里ptr指向str的结束标志\0不应该就跳出循环了,为什么最后打印的地址是在结束标识符'\0'的后面。 因为 *ptr++ 这一句
while循环会先取出里面的值判断,并执行ptr++ BngThea 发表于 2018-3-13 09:04
因为 *ptr++ 这一句
while循环会先取出里面的值判断,并执行ptr++
对啊,可是结束标志符\0不是对应ASCLL值的0吗?,不就跳出循环了 WTS123456 发表于 2018-3-13 09:05
对啊,可是结束标志符\0不是对应ASCLL值的0吗?,不就跳出循环了
跳出以后,再自增,地址向后移动了 这里应该是先做ptr++之后再取值去做判断 本帖最后由 风扫地 于 2018-3-13 09:18 编辑
while(*ptr++)
{
printf("%c,%d\n",*ptr,ptr);
}
这里判断的是第N个值,输出的却是第N+1个值。。
当( *ptr++== '\0' ) 虽然可以跳出循环,但是 ptr已经访问越界了 指向了 '\0'的后一个元素了。。
建议写成这样
while(*ptr)
{
printf("%c,%d\n",*ptr,ptr);
ptr++;
}
先判断当前指向,确认不为0后再移动指针,循环往复。
页:
[1]