‘c’指针入门很难?不要慌!

  • 一.指针是什么?

  • 二.指针和指针变量的区别

  • 三.指针变量和指针变量的类型及指针的解引用

  • 四.指针加减一个常数表示什么?

  • 五.指针减指针表示什么?

  • 六.什么是野指针及规避的方法

一.指针是什么

先讲指针的概念,指针:是内存中一个最小单元的编号,也是地址,平时口语中说的指针,通常被认为是指针变量。

简单来说的话,指针实际上就是地址。

二.指针和指针变量的区别

我们在对一个变量进行取地址的时候,得到的地址一般会给它保存到一个变量中,此时这个变量就是指针变量

指针变量就是用来存放地址的的变量

三.指针和指针的类型及指针的解引用

1.在我们学习变量的时候都知道变量有不同的类型,例如:char,int,float,double等

指针变量也是一个变量,所以指针也有对应的类型

定义不同类型的指针变量是为了存放不同类型的地址

比如:char类型的指针变量为了存放char类型的地址, int类型的指针变量为了存放int类型的地址

不同类型的指针变量,它们所占的空间都是一样

但在不同的机器中它们占用的空间大小不同

在32位机器中,指针占用的空间大小为4个字节

而在64位机器中指针占用的空间大小为8个字节

  1. 指针的解引用

下图可以看出此时a=10

当我们执行完第39行的代码时,可以看出此时a=0,如下图

综上可得出:p此时存的a的地址,表示p指向a,*p实际上可以表示为a,*p=0,就相当于a=0

*p就表示p所指向的目标,可以理解为*p=a

四.指针变量加减一个常数表示什么?

不同类型的指针加减一个常数代表的含义也不同,如下

char类型的指针+1(-1)表示向后(向前)移动1个字节

int类型的指针+1(-1)表示向后(向前)移动4个字节

我们可以看到每个地址之间都隔着4个字节,此时arr[0]=1,arr[1]=0,让我们继续往下执行程序

此时我们可以看到arr[1]=1,显然int类型的指针变量+1表示往后走四个字节

从地址我们就可以看出C0-BC=4,BC-B8=4

总结来说就是:

char类型的指针+1表示向后移动1个字节 int类型的指针+1表示向后移动4个字节

五.指针减指针表示什么?

指针加减指针的含义可以用例如库函数strlen来解释

p-s表示p到s之间一共有多少个元素

当我们需要求一个字符串的长度时可以使用这种方法

六.什么是野指针及规避的方法

野指针:指针指向的位置时不可知的,随机的,不确定的

常见的野指针如:

1.指针未初始化

  1. 指针越界访问

  1. 当指针指向的空间被释放以后,未及时置0

规避野指针的方法如下

  1. 当定义指针的时候初始化

  1. 当指针指向的空间被释放以后,要及时置0(p=NULL)

  1. 防止指针越界访问

  1. 指针使用之前检查指针的有效性

猜你喜欢

转载自blog.csdn.net/m0_72532428/article/details/129087025