在C.中的++ argv [1]是什么意思?

时间:2014-08-08 14:19:30

标签: c pointers

如果从命令行执行,程序(myprog.c)的输出是什么?

cmd> myprog friday tuesday sunday

/* myprog.c */ 
#include<stdio.h> 

int main(int argc, char *argv[]) 
{ printf("%c", *++argv[1]); return 0; }

我知道argv [1]将是星期五,++ argv [1]意味着星期二。我可能错了。 无论哪种方式,我似乎都不明白整个表达的含义是什么。

3 个答案:

答案 0 :(得分:12)

关注operator precedence rules,表达式相当于*(++(argv[1]))。换句话说,首先评估argv[1],它引用字符串"friday"。接下来,++前缀增量会更改对字符串"riday"的引用。最后,*取消引用会返回字符'r'

答案 1 :(得分:9)

------------------------------
| f | r | i | d | a | y | \0 |
------------------------------
 ^    ^
 |    |
 |    ++argv[1]
 |
 argv[1]

Ergo,*++argv[1]为您提供了++argv[1]个字符,即'r'Demo

答案 2 :(得分:4)

  

如果从命令行执行,程序(myprog.c)的输出是什么?

如果没有访问带有编译器的计算机,学习编程是非常困难的。执行程序时输出了什么?

总之...

  • argv[0]是指向包含程序名称的字符串的指针,以下参数是指向其他命令行参数的指针。
  • 所以argv[1]是一个指向字符串"friday"的指针,或者更确切地说是第一个元素'f'
  • ++argv[1]将此指针递增1,使其指向'r'。 (顺便说一句,代码行是糟糕的做法和糟糕的编程风格。不仅因为它难以阅读,而且因为改变命令行参数通常是一个坏主意。)
  • 因此,取指针的内容应该为您提供'r'