目录
基本类型
C++基本类型:算术类型(字符、整型数、布尔值、浮点数)和空类型(void)。
变量
变量命名规则
- 只能由字母、数字、下划线组成,不能以数字开头。
- 区分大小写,如a和A代表不同的意思。
- 变量名一般用小写,如index,而非INDEX。
- 多个单词的变量一般命名为studentLoan或student_loan。
变量的声明、定义、初始化、赋值的区别
- 声明:告诉编译器这有一个变量,不分配内存。例如:
extern int a;//声明a而非定义
- 定义:告诉编译器这有一个变量,分配内存,一般是随机给一个值。例如:
int a;//声明并定义a
仅针对基本类型,此时定义了a,会默认初始化,即有一个默认值,但会根据位置的不同而不同。第一种情况,在任意函数体内(包括main、函数、类等),即我们通常的情况,a默认一个随机的值;第二种情况,在任何函数体外,a默认是0。
- 初始化:分配内存时,给一个我们想要的初值。下面是三种等价的初始化方式:第一个不是赋值!
//定义a并初始化为0 int a=0; int a(0); int a{0};
- 赋值:擦掉旧值,给个新值。
a=10;//擦掉a原有的值,用10来替代
为了支持分离式编译,C++语言才将声明和定义区分开来的。变量可以被多次声明,但只能定义一次。
变量的作用域
C++的作用域以花括号{}分隔,变量只在相应的作用域内其作用。作用域好比县、市、省、国家,某人在国内有名气,那么他在国内的各个省肯定有名气,但在外国就不一定有名气。如果他想在国外说明自己在国内有用,就需要加个“china::变量名”:
std::cout<<a<<std::endl;
复合类型
C++复合类型是指基于其他类型定义的类型。主要介绍:引用和指针。
我们主要搞懂这四个东西:int &a 、&a 、int *a、*a。
引用(reference):int &a是引用的创建
- 引用就是一个对象的别名(绰号)
- 引用不是值不占内存空间。
- 引用必须在定义时赋值,将变量与引用绑定
int a=10;
int &b=a; // a有一个绰号叫b
b=666;
cout<<a<<endl; //a是666
cout<<b<<endl; //b是a的绰号,当然也是666
指针(pointer):&a 、int *a、*a。
int* a是开辟一块空间用来存放int型的地址;
*a是 指针指向的对象,a是地址,*是解地址;
&a是获取a的地址。
int a=10;
int *b=&a; // b是a的地址
*b=666; //修改a的值
cout<<b<<endl; //b是地址,所以输出一个地址为0x61fe14
cout<<a<<endl; //输出666
小结:搞清楚“int &” 、“&” 、“int *”、“*” 是四个完全不同的意思,分别是引用的创建、取地址、开辟空间存地址、解地址。别看很像,就像一个英文单词,错了一个字母意思就大变样了。
ps:对象的一个很大特征是它有实际内存分配的。
const(常量)限定符
被const的变量不能修改,且定义时必须指定初始化。例如:
const int a=6; //正确
a=8; //错误,a是const修饰的,不能更改
const int b; //错误,const必须初始化
常量的引用或指针也必须是常量
const int a=8;
//引用
int &b=a; //错误,下面是修改后
const int &b=a; //正确
//指针
int *p=a; //错误,下面是修改后
const int *p=&a; //正确
简单说就是,被const修饰的变量 的引用或指针前面也必须加个const,都是const,所以常量指针的对象也是不能修改的。
顶层const与底层const
顶层const:表示指针本身是一个常量。
底层const:表示指针所指的对象是一个常量。(上面的例子就是底层const)
int *const p1=&a; //不能改变p1的值,是顶层const
const int *p2=&a; //允许改变p2的值,是底层const
处理类型
类型别名
简单说就是,你把官方的关键字“int”改成你自己喜欢的词,很方便,有两种方法都可行:关键字typeof和using。
typeof和using
typedef int zhengxing; //zhengxing和int是同义词
typedef zhengxing zx,*p; //zx是int的同义词,*p是int*的同义词
using db=double; //db和double是同义词
db a; //等价与 double a;
自定义数据结构
可以这样理解,数据结构就是把一组相关的数据元素组织起来然后使用它们的策略和方法。就像原子组成分子,分子组成物质,逐层抽象,忽略底层,看重应用。
自定义 单链表的节点结构体
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*Linklist;
此段代码,用typedef将结构体等价于类型名Lnode,指针Linklist。
总结
类型是C++的基础。
这小节我们学了,变量(基本数据类型)、引用和指针的用法、修饰变量的const的用法、以及如何自定义类型和命名。
可以通过看目录了解我们学了什么,看着目录重述所学到大致内容,表明就掌握得还行。