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

时间:2018-01-05 11:05:56

标签: c command-line

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

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

./a.out one two three

输出结果为:

p

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

1 个答案:

答案 0 :(得分:6)

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

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

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

相关问题