argc,argv和C/C++易错题分析

这篇文章主要讲解了“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

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;

}

argc,argv和C/C++易错题分析

可见它其实就是将参数存在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

你或许会以为是1,但实际上大小号的优先级别大于==号,所以答案应该是0

小心取整问题

假定x和y为double型,则表达式(x=2,y=x+5/2)的值是__C__ 。

你或许会以为答案是4.500000,但是5/2会自动向下取整,所以真实答案是4.000000.

static局部变量只被初始化一次,下一次依据上一次结果值

#include

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

#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++易错题分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


网页标题:argc,argv和C/C++易错题分析
本文来源:http://pwwzsj.com/article/jspjje.html