目录
C语⾔
(1)数组
(2)指针
指针变量
空指针
(3)指针复杂类型
int a = 0;
int *p = &a;
int p[3];
int *p[3];
int (*p)[3];
int **p;
int p(int);
int(*p)(int);
C语⾔
(1)数组
当数据具有相同的数据类型;使用过程中需要保留原始数据使可以引用数组来使用。
1、数组的地址是数组的⾸元素地址;
2、数组的内存是连续的;
3、数组是一组有序数据的集合。数组中各数据的排列是有一定规律的;
4、数据中的每一个元素都属于同一个数据类型,不能把不同类型的数据放在同一个数组中;
5、用一个数组名和下标来唯一确定数组中的元素。
(2)指针
指针指向地址所在的值。
在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就像酒店的门牌号一样。
指针变量
指针变量就是一个变量,它存储的内容是一个指针。如果用前面的例子,可以理解为指针变量就是一张房卡,房卡存储了房间号的信息。
如果指针变量p1保存了变量num的地址,则就说:p1指向了变量num,也可以说p1指向了num所在的内存块。
在我们定义一个变量的时候,要确定它的类型。int x、char ch、float......在定义指针变量时也是一样的,必须确定指针类型。int 变量的指针需要用 int 类型的指针存储,float 变量的指针需要用 float 类型的指针存储。就像你只能用酒店 A 的房卡存储酒店 A 中房间号的信息一样。
变量的指针就是变量的存储地址,指针变量就是存储指针的变量。
取地址:使⽤&运算符取得⼀个变量的地址。
空指针
在C语⾔中,让指针变量赋值为NULL表⽰⼀个空指针,⽽C语⾔中,NULL实质是((void*)0),在C++中,NULL实质是0。要避免空指针。
(3)指针复杂类型
int a = 0;
这是⼀个普通的整形变量。
int *p = &a;
声明p是⼀个指针,指向的内容为a地址所存储的int类型的值。
首先从p处开始,先与*结合,所以说明p是一个指针,然后在与int结合,说明指针所指向的内容的类型为int型,所以p是一个返回整型数据的指针。
int p[3];
声明⼀个数组。
首先从p处开始,先与[]结合,说明p是一个数组,然后与int结合,说明数组里的元素是整型的,所以p是一个由整型数据组成的数组。
int *p[3];
⾸先从p开始,先与[]结合,因为其优先级⾼,所以p是⼀个数组,然后再与*结合,说明数组⾥的元素是指针类型,然后再与int结合,说明指针所指向的内容的类型是整型的,所以p是⼀个由返回整形数据的指针所组成的数组。
int (*p)[3];
⾸先从p处开始,先与*结合,说明p是⼀个指针,然后再与[]结合(与“()”这步可以忽略,只是为了改变优先级),说明指针所指向的内容是⼀个数组,之后再与int结合,说明数组⾥的元素是整型的,所以p是⼀个指向由整型数据组成的数组的指针。
int **p;
指针所指向的元素是指针。
首先从p开始,先与*结合,说是p是一个指针,然后再与*结合,说明指针所指向的元素是指针,然后再与int 结合,说明该指针所指向的元素是整型数据,由于二级指针以及更高级的指针极少用在复杂的类型中,所以后面更复杂的类型我们就考虑多级指针了,最多只考虑一级指针。
int p(int);
从p处起,先与()结合,说明p是一个函数,然后进入()里分析,说明该函数有一个整型变量的参数,然后再与外面的int 结合,说明函数的返回值是一个螫型数据。