5.写出下列语句的输出结果:char arr[ ]=“abcdef”,*ptr; fo

1个回答

  • 1、我们先来看ptr和数组arr的关系:

    ptr是一个字符指针,它指向了字符数组arr的开始的元素arr[0](这是由for中的表达式

    1 ptr=arr实现的).

    2、我们再来看for循环:

    循环条件:当 ptr < arr+2 时循环继续,而这个arr+2是数组arr中元素 arr[2] 的地址&arr[2];

    循环体:printf(“%c--%sn”,*ptr, ptr); 输出ptr所指向的单元内容以及ptr所指向的字符串,其

    中的*ptr的值为字符a,%s会从ptr指向的地址开始输出字符串,所以开始时输出 a--abcdef;

    接下来ptr++是使得ptr指向下一个单元,因此输出上面内容后ptr指向了 arr[1],或者说ptr的

    值等于arr+1(实际是&arr[1]),由于arr+1小于arr+2成立,所以执行循环体

    printf(“%c--%sn”,*ptr, ptr);

    而此时的ptr由于指向了arr[1],其对应的字符为b,所以*ptr的值为b,后面的%s会从ptr指向

    的地址开始输出字符串,所以会输出 bcdef.

    3、循环的结束:

    由于再一次ptr++ 后,ptr的值为arr+2 ,已经不满足pt