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;

}



详解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<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.




欢迎关注幻象客。

网站:www.huanxiangke.com.