为什么++**++ argv的printf输出'p'?

-4 c command-line

#include<stdio.h>
int main(int argc,char *argv[]) {
    printf("%c",++**++argv);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

假设传递的命令行参数是:

./a.out one two three
Run Code Online (Sandbox Code Playgroud)

输出是:

p
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下发生了什么吗?

das*_*ght 6

++**++argv表达式的后面开始:

  • argv作为指向元素零的指针开始,即"./a.out"""
  • ++argvchar**指向字符串"one"
  • *++argvchar*指向字符串"one"的初始元素
  • **++argvchar等于字符串"one"的初始元素,即'o'
  • ++**++argv就是char如下'o'.在大多数系统上'p'.

最后一个操作修改了程序的参数,这是标准(Q&A)允许的.