#include<stdio.h> intmain() { int a = 0; char ch = '\0'; scanf("%d %c", &a, &ch); printf("a = %d , ch = %c \n", a, ch); return0; }
1 2 3 4 5 6 7 8 9 10
#include<iostream> usingnamespace std; intmain() { int a = 0; char ch = '\0'; cin >> a >> ch;//不可写作cin >> a, ch; cout << "a = " << a << "\t" << "ch = " << ch << endl; return0; }
函数的区别
函数参数默认值
1 2 3 4 5 6 7
intfun(int a, int b, int c) { cout << a << endl; cout << b << endl; cout << c << endl; return0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
intfun(int a, int b, int c = 10) { cout << a << endl;//<<为输出运算符。 cout << b << endl; cout << c << endl; return0; } intmain() { int a = 1; int b = 2; fun(a,b); //知识点:函数的默认值参数:如果不传c,则填充默认值,push 0Ah,其他的参数push eax。 //在函数声明或者定义的时候给定参数默认值;如果实参传递的时候不给该形参传值,则会按照默认值传参。 //函数的默认值参数 是在编译期,生成指令的时候,直接生成入参指令。 //函数参数默认值不能传递变量,必须是常量。因为变量在编译期时无法取值。 return0; }
1 2 3 4 5 6 7 8 9
//以下情况不可以,在调用此函数时,会出现歧义。因此编译器不能通过。 //函数的参数只能从右向左依次连续赋值,不能跳过 intfun(int a, int b = 10, int c) { cout << a << endl; cout << b << endl; cout << c << endl; return0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//但是如下代码可以运行,结果为1, 10, 20. //相当于fun函数在定义时定义c的默认值为20,在声明时定义b的默认值为10。 intfun(int a, int b, int c = 20) { cout << a << endl;//<<为输出运算符。 cout << b << endl; cout << c << endl; return0; } intfun(int a, int b = 10, int c); intmain() { int a1=1; fun(a1); }
1 2 3 4 5 6 7 8 9 10
//错误,函数的默认值参数在同一作用域只能赋值一次,不能重复给相同的一个参数赋值。 intfun(int a, int b, int c = 20) { cout << a << endl;//<<为输出运算符。 cout << b << endl; cout << c << endl; return0; } intfun(int a, int b, int c = 30); //无法运行,提示参数默认值重定义赋值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
//不可行。编译是针对单文件的,所以不能知道在其他文件函数中定义的函数参数默认值 #fun.cpp intfun(int a, int b, int c = 20) { cout << a << endl; cout << b << endl; cout << c << endl; return0; } #main.cpp intfun(int a, int b, int c); intmain() { int a1 = 1; int b1 = 2; fun(a1,b1); return0; }
//c语言的写法 boolcompare1(int a, int b) { return a > b; } boolcompare2(char a, char b) { return a > b; } intmain() { int a1 = 1; int b1 = 2; char a2 = 'c'; char b2 = 'b'; compare1(a1,b1); compare2(a2,b2); }
C++生成函数符号依赖函数名和参数列表(返回值不影响)。
1 2 3 4 5 6 7 8
boolcompare(int a, int b) { cout << "bool compare(int a, int b)" << endl; } boolcompare(char a, char b) { cout << "bool compare(char a, char b)" << endl; }
//可以运行,因为虽然main中只是声明,但是会生成UND符号,会寻找链接。 #fun.cpp boolcompare(int a, int b) { cout << "bool compare(int a, int b)" << endl; } boolcompare(char a, char b) { cout << "bool compare(char a, char b)" << endl; } #main.cpp boolcompare(int a, int b);//*UND* boolcompare(char a, char b); intmain() { int a1 = 1; int b1 = 2; char a2 = 'c'; char b2 = 'b'; compare1(a1,b1); compare2(a2,b2); }