如果从命令行执行,程序(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]意味着星期二。我可能错了。 无论哪种方式,我似乎都不明白整个表达的含义是什么。
答案 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'
。