WTS123456 发表于 2018-3-13 08:44:54

字符指针地址问题

#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'的后面。

BngThea 发表于 2018-3-13 09:04:23

因为 *ptr++ 这一句
while循环会先取出里面的值判断,并执行ptr++

WTS123456 发表于 2018-3-13 09:05:43

BngThea 发表于 2018-3-13 09:04
因为 *ptr++ 这一句
while循环会先取出里面的值判断,并执行ptr++

对啊,可是结束标志符\0不是对应ASCLL值的0吗?,不就跳出循环了

BngThea 发表于 2018-3-13 09:10:02

WTS123456 发表于 2018-3-13 09:05
对啊,可是结束标志符\0不是对应ASCLL值的0吗?,不就跳出循环了

跳出以后,再自增,地址向后移动了

chiaowp 发表于 2018-3-13 09:13:16

这里应该是先做ptr++之后再取值去做判断

风扫地 发表于 2018-3-13 09:13:29

本帖最后由 风扫地 于 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]
查看完整版本: 字符指针地址问题