C++学习第一天
1、代码调试时一闪而过:因为程序没有输入,只有固定的输出。在遇到 return 时自动退出。
三种解决方法:
- 采用输入方法不让程序终止。
cin.clear; //清空缓存
cin.sync; //清空缓存
cin.get; //接收键盘输入
- 与1一样,采用输入方法不让程序终止。使用不同的输入方法:
getchar();
return 0;
使用getchar函数获得一个char类型,但是不赋予任何一个变量。
- 使用暂停方式
system("pause");//按任意键继续...
2、基本语法
- 什么叫做c++代码:
可以看做是对象的集合。对象间的调用实现了很多功能。
对象:具有状态和动作
类:描述对象的状态、动作的模板
方法:描述动作的,一个类可以有多个方法,即多个动作
即时变量:表示一个对象 - 三字符组
用于表示 以前键盘上没有的字符,用三个字符来表示。
如 ??/ 翻译为 \ - 标识符
其实就是定义的变量,要以大小写字母、下划线开头,后可接大小写字母、下划线、数字 - 关于命名空间
using namespace std
避免定义了同一个变量名,比如我自己也定义了一个vector,为了区分,限制了变量名。使用了std::表示使用c++的标准库,少用了上述语句,不需要再重复加前缀std::
3、数据类型
- 需要变量来存储信息,变量中一般保存的是存储的值的内存位置。当创建一个变量时,就会在内存中留出一部分的位置。
- 字节(Byte)
一个字节 = 8个 bite,bite是计算机内存的最小单位,存储的是一个二进制数 即0 或 1。 - 变量类型:
布尔型 : bool ;字符型:char ;整型:int;浮点型:float; 双浮点型:double float;
无类型:void ; 宽字符型:wchar_d;
一个基本类型可以由 有无符号:signed;unsigned;长短:long,short;来修饰
(注:对于 float 类型是没有有无符号之分的) - 每个类型需要占用的内存以及表示的范围
- 对于c++来说,具体每个类型占用的内存大小是和操作系统相关的,但是也有一定的规则,如long>short,具体的可以用 sizeof(int) 来查询占用的内存大小。
- 枚举变量
可以定义枚举变量:
enum rank {first,second, third} nrank;//定义了一个枚举变量nrank,取值只能为1,2,3,并且默认情况下first,second, third 的值为 0,1,2
enum rank {first,second = 2, third} nrank;//此时first = 0,third = 3,后面的比前一个大1.
- 疑问:a = 2, 是指变量的值为2还是地址为2。???????
4、变量类型
- 变量定义是告诉编译器在内存的哪个位置创建变量的存储,以及如何创建变量的存储。
- 对于未初始化的变量:
静态存储持续时间的变量 被初始化为Null,即每个字节的值都是0;
其他变量:未定义
ps:静态存储持续时间的变量:
1. 静态持续性、外部链接性
全局变量:在某个文件中定义的变量,在另一个文件中需要引用,引用前要先声明
如文件1中有变量 int a = 12,在文件2中使用的话,声明 extern int a; 再使用。
2. 静态持续性,内部连接性
加上static的全部变量:仅在当前文件中可以访问,若在代码块中有重命名,会隐藏掉全局变量;又想使用全局变量,需要使用作用域 ::a。
只能作用于当前文件,如果两个不同文件定义了同一个变量,这两个变量也是不同的。
3. 静态持续性,无连接性
加上static的局部变量,代码块运行结束后,该变量的内存空间仍然存在,值也存在。再次运行该代码块时,值会叠加。
5、作用域
全局变量、静态全局变量、静态局部变量
- 从内存分配来看,全局变量、静态变量都在静态存储区分配空间,在程序运行的过程中一直存在;而局部变量在栈里分配空间,只有在函数执行期间存在,当函数一次调用结束后,变量被撤销,内存也被收回。
- 当局部变量未初始化时,系统不会给初始化;当全局变量未初始化时,会被默认初始化为0。
6、常量
- 常量:整型、浮点型、字符、字符串、布尔值
- 两种方法定义常量:const、#define
(把常量定义为大写字母形式,是一个很好的编程实践。)
#define A = 10;
const int A = 10;
注意:
const 定义常量后,不能再赋值
const A; //也是错误的,需要初始化
A = 10;//是错误的
const A = 10;//正确
extern const A;//正确,使用extern的外部变量;
宏定义#define、const 的区别:
- #define 在编译时起作用,const在编译运行时起作用;
- #define 不分配内存,const 分配内存,在数据段存储;
- 类型和安全检查:#define 没有定义类型,产生边际效应等错误;const 定义了类型;
- 定义域不同:#define 没有限制定义域,const 有定义域的限制。
- const 可以做函数的参数,#define 不行;
- #define 定义后可以取消,#undef; 取消后可以重新定义。