【问题标题】:Explain the output. It is printing next alphabet of every alphabet解释输出。它正在打印每个字母的下一个字母
【发布时间】:2015-09-13 18:47:52
【问题描述】:
#include<stdio.h>
int main()
{
  char arr[]  = "abcdef";
  char *ptr  = arr;


 while(*ptr != '\0')
     ++*ptr++;
  printf("%s %s",arr,ptr);

  return 0;
}

输出:bcdefg

它正在打印给定的每个字母的下一个字母。 到底发生了什么?

【问题讨论】:

  • 我是个业余爱好者。任何想法? @hacks
  • 试试printf("[%s] [%s]\n", arr, ptr);
  • 我假设是 ++*p++ 1. 取消引用 2. 增加值 3. 增加地址。我说的对吗?
  • @pmg 它正在打印数组 [bcdefg]

标签: c pointers increment decrement


【解决方案1】:

这里有三个运算符,后缀++,前缀++,间接*

后缀++ 的优先级高于其他两个,将首先评估。但是当使用后缀++ 时,值计算在更新存储值的副作用之前排序,即递增指针。所以指针ptr 会递增,但其他两个操作数++* 中使用的值将是旧值。

前缀++ 和间接运算符具有相同的优先级,但从右到左计算。所以间接*先行,然后前缀++递增对象指针ptr指向的值。

【讨论】:

    【解决方案2】:

    关键是要理解这个语句的作用

     ++*ptr++;
    

    解析为

     ++(*(ptr++));
    

    它增加了ptr 指向的,同时也增加了ptr

    简短的回答是:不要写那样的代码:)

    【讨论】:

    • 谢谢你。在一些竞争性考试中被问到@Blue Moon
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2015-04-17
    • 2015-08-15
    相关资源
    最近更新 更多