这篇文章主要讲解了“argc,argv和C/C++易错题分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“argc,argv和C/C++易错题分析”吧!
argc即argument count. 顾名思义,是用户在命令行内输入的参数个数。
argv即argument vector. 是用户输入的参数vector库(数组)
int main(int argc ,char *argv[])
char *argv[] 即指针数组([]优先级别高于*,于是就里面的每个元素都是char*类型,要理解好 char (*argv)[] 和 char *argv[]的区别),每一个元素内,存的都是参数,这些参数都是字符串。其实就是vector库。如果你这里暂时不理解,没关系,往下看。
它其实就是记录了程序被执行时所传入的参数。包括打开程序的那条语句。如我保存了一个程序为test.exe, 在命令行执行这个程序并顺便带几个参数:
test.exe x y z
这样的话argc就是四个参数,分别为text.exe、x、y、z. 输出的话将是这样的:
代码:
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
cout << "参数个数是: " << argc << endl << "分别是:" << endl;
for (int i = 0; i < argc; ++i)
cout << argv[i] << endl;
return 0;
}
可见它其实就是将参数存在argv这个vector库)内,你想输出的话可以直接输出这些参数。
理清楚优先级别:
1.
int x,y,z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
其中:
z=x++,y++,++y;
这是逗号表达式,最终结果为最后一个数。这么说你可能会以为答案是2,2,3.
但实际上不是的,这里不是z=(x++,y++,++y);如果是这样的才是2,2,3.
所以正确答案应该是2,3,1.
2.
设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=1,则逻辑表达式(m==a<b)&&(n==c<d) 的值为__.
你或许会以为是1,但实际上大小号的优先级别大于==号,所以答案应该是0
小心取整问题
假定x和y为double型,则表达式(x=2,y=x+5/2)的值是__C__ 。
你或许会以为答案是4.500000,但是5/2会自动向下取整,所以真实答案是4.000000.
static局部变量只被初始化一次,下一次依据上一次结果值
#include <iostream>
using namespace std;
int f(int a)
{
int b = 0;
static int c = 3;
b++; c++;
return(a + b + c);
}
int main()
{
int a = 2, i;
for (i = 0; i<3; i++) printf("%d\n", f(a));
return 0;
}
答案是7 8 9,我不想排版太难看,所以还是自己脑补空格变换行吧!
小心宏定义
#include <stdio.h>
#define ABC(x) x*x
int main()
{
int a = 3, b;
b = ABC(a + 1);
printf("b = %d \n", b);
return 0;
}
这里的答案是7。原因是什么呢?因为宏定义只是单纯的替换而已。其实b=a+1*a+1=7.
感谢各位的阅读,以上就是“argc,argv和C/C++易错题分析”的内容了,经过本文的学习后,相信大家对argc,argv和C/C++易错题分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。