1.C到C++
一.函数
1.函数传参过程:从右到左依次传递,即是一个入栈的过程
验证:
1 void print(int a,int b,int c); 2 3 int _tmain(int argc, _TCHAR* argv[]) 4 { 5 int n = 0; 6 7 print(n++,n++,n++); 8 while(1); 9 return 0; 10 } 11 12 void print(int a,int b,int c) 13 { 14 printf("%d,%d,%d",a,b,c); 15 }
2.函数缺省参数
1) 顺序:从右到左依次赋值
2) 补充:
2-1 只用在声明函数时给默认值,实现函数时不用给,否则会导致"默认值重写"的错误
2-2 给默认值时一定是从右往左依次赋值,中间不能跳过,或最右边的参数没有默认值,否则编译都不会通过
验证:
1 //正确示例 2 void print(int a,int b,int c=0); 3 void print(int a,int b=0,int c=0); 4 void print(int a=0,int b=0,int c=0); 5 6 //错误示例 7 void print(int a=0,int b,int c); 8 void print(int a,int b=0,int c); 9 void print(int a=0,int b=0,int c); 10 void print(int a=0,int b,int c=0);
3.函数的重载
3-1 重载方式
1) 参数个数不同
2) 参数类型不同
3) 参数顺序不同
验证:
1 //原函数 2 void print(double a,int b,int c); 3 4 //重载函数 5 void print(double a,int b); //个数不同 6 void print(int a,int b,int c); //类型不同 7 void print(int a,double b,int c); //顺序不同
3-2 函数的重载与函数缺省参数一起使用时,要注意二义性问题
1) 二义性:简单来说,就是同一个词语有两种或多种意思
2)补充:
如下代码,在主函数中调用print()函数时,只传递两个参数,函数1与函数2都能匹配到该调用,此时编译器就蒙蔽了,不知道该去调用哪个函数,就出现 了二义性问题。
函数1与函数2这样去声明与实现,编译器是允许的(编译和运行),但是在调用时才会出问题,所以在重载函数时一定要注意二义性问题
验证:
1 void print(int a,int b,int c=0); 2 void print(int a,int b); 3 4 int _tmain(int argc, _TCHAR* argv[]) 5 { 6 int n = 0; 7 8 print(n++,n++); 9 while(1); 10 return 0; 11 }
二.VS编程框架(Microsoft Visual Studio)
注:项目使用的是win32控制台应用程序
1.框架(win32控制台应用程序)
1) "stdafx.h": 预编译头文件,用来引入头文件
引入头文件方式: #include "这里填写.h文件所在路径"
2) "stdafx.cpp": 只是因为预编译头的需要才会有,可以忽略掉,没有什么作用
3) "targetver.h": 仅仅是为了适应WindowsOS版本(例如Windows7,Windows10等)的需要,不用去关注
2.字符集
2-1 VS存储字符串有两种方式
1) 多字节字符集:一个字符用一个字节存储
2) unicode(宽字节)字符集:一个字符用两个字节存储
3) 多字节与unicode字符集存储字符的方式
例如一串字符"abcde",多字节字符集存储的方式是"abcde",unicode字符集存储的方式是"a\0b\0c\0d\0e\0"
4) 补充:
一个字节为八个比特,如下图所示,可以表示256个字符,两个字节为16比特,可以表示256*256 = 65535个字符,之后依次类推,三个字节就可以表示256*256*256个字符

在英语中,用128个符号编码便可以表示所有的字符,所以一开始只有多字节字符集。但是用来表示其他语言,128个符号是不够的,例如我国的文字就有很多,用256个字符表示根本不够用,于是就用两个字节来表示一个字符,但是呢用两个字节也不一定表示所有的汉字,所以在不同的编译器中,unicode字符集可能是用两个字节存储,也可能是用三个字节存储。
在VS编译器里,如果是多字节字符集,"_TCHAR"类型的定义是"typedef char _TCHAR;", 如果是unicode字符集,"_TCHAR"类型的定义是"typedef wchar_t _TCHAR;"
3.main函数参数(也叫命令行参数)
1) argc:命令行字符串个数,系统会自动填充
2) argv:字符类型的二维数组,或者说是保存字符指针的一维数组,用来存放多个字符串
3)补充:
字符集要使用多字节字符集
在指定路径下打开cmd:先进到想要打开cmd的路径下,例如"D:\DialogTest\Test\Debug",如下图,删除这个路径,然后在里面输入"cmd.exe"即可

验证:
1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 5 6 int _tmain(int argc, _TCHAR* argv[]) 7 { 8 for (int i=0;i<argc;i++) 9 { 10 cout << "argv[" << i << "]:"<< argv[i] << "\n"; 11 } 12 cout << endl; 13 14 return 0; 15 }
实现效果:
补充:
命令行运行:第一个值输入当前项目在Debug下生产的.exe文件,后面的值就是输入的参数
输出结果:从输出结果可以看出,第一个值保存的是程序的路径,后面的值则是输入的参数

浙公网安备 33010602011771号