05 C/C++ 指针复杂类型说明 9月5日

目录

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 结合,说明函数的返回值是一个螫型数据。

int(*p)(int);

05 C/C++ 指针复杂类型说明 9月5日_第1张图片

05 C/C++ 指针复杂类型说明 9月5日_第2张图片

你可能感兴趣的:(基地实训,c语言,c++,开发语言)