指针


指针就是变量,用来存放地址的变量(存放在指针中的值都被当成地址处理)

指针的大小在32位平台上是4个字节,在64位平台上是8个字节

指针和指针类型

指针类型决定了指针进行解引用操作的时候,能访问空间的大小

int*p;  p能够访问4个字节

char*p;  p能够访问一个字节

double*p; p能够访问8个字节

c语言day10_10_1_学习

指针类型决定了:指针走一步走多远(指针步长)

int*p;  p+1->4  (字节)

char*p;   p+1->1

double*p;  p+1->8

c语言day10_10_1_学习_02


野指针

野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)

野指针成因

1,指针未初始化

c语言day10_10_1_学习_03

2,指针越界访问

c语言day10_10_1_学习_04

3,指针指向的空间释放

c语言day10_10_1_学习_05

如何规避野指针

1,指针初始化

当你不清楚应该把指针初始化谁时,可以这样

int*p=NULL;//NULL是((void*)0),本质上是一个0

NULL用来初始化指针的,给指针赋值

2,小心指针越界

3,指针指向空间释放,你不想用指针时,可以置为NULL

4,指针使用之前检查其有效性

if(pa=NULL)空指针里面放的地址不能用

就不能用

if(pa!=NULL)

就可以用

指针运算

指针+- 整数

指针-指针

指针的关系运算(比较大小啥的)

1,指针+-整数

c语言day10_10_1_学习_06

2,指针-指针

c语言day10_10_1_学习_07

求个数的实例

c语言day10_10_1_学习_08

3,指针的关系运算

c语言day10_10_1_学习_09

标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较

指针和数组

c语言day10_10_1_学习_10


数组可以通过指针访问


c语言day10_10_1_学习_11


二级指针

c语言day10_10_1_学习_12


int**,第一个*是表示int*,第二个*是表示后面的ppa是指针

c语言day10_10_1_学习_13

指针数组,数组指针

指针数组--是一个存放指针的数组

数组指针--是一个指针

c语言day10_10_1_学习_14