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

Kri*_*i07 8 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; }
Run Code Online (Sandbox Code Playgroud)

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

Dre*_*wen 12

遵循运算符优先级规则,表达式等效于*(++(argv[1])).换句话说,argv[1]首先评估,它引用字符串"friday".接下来,++前缀增量会更改对字符串的引用"riday".最后,*取消引用返回角色'r'.


T.C*_*.C. 9

------------------------------
| f | r | i | d | a | y | \0 |
------------------------------
 ^    ^
 |    |
 |    ++argv[1]
 |
 argv[1]
Run Code Online (Sandbox Code Playgroud)

Ergo,*++argv[1]给你的角色++argv[1]指向,即'r'.演示.


Lun*_*din 5

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

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

反正...

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