指针与指针变量的区别(C语言)

提示:本章主要谈及个人对C语言指针和指针变量的理解


前言

指针是C语言中的一个很重要的concept,掌握指针的应用,可以使程序更加简洁、紧凑和高效。可以说,没有掌握指针就是没有掌握C语言的精华。


提示:以下是本篇文章正文内容,下面案例可供参考

一、指针是什么?

通过学习C语言我们知道,在定义变量的时候,系统会自动给该变量分配内存空间。编译系统根据程序中定义的变量类型,分配一定长度的空间。
思考这样一个问题:
要怎么才能知道系统分配给变量的内存空间在哪里呢?

首先想象一个现实生活中的场景:
你去游泳馆游泳的时候,一般都需要一个抽屉来存放个人的随身物品,那么你就会从服务员手上得到一把带有抽屉编号的钥匙,然后根据钥匙上的编号在柜子上找到对应的抽屉,最后就可以把物品存放到抽屉里面进行保管。

通过上面的例子,不难发现:
当我们找东西时,其实只要知道它所在的确切位置就能够顺利地找到它了。在C语言中,内存区(柜子)的每一个内存单元(抽屉)都有一个地址(编号),C将地址形象化为“指针”。意思是通过它就能够找到以它为地址的内存单元)。变量(钥匙)包含数据存放的地址值,用于访问地址所确定的内存单元中的数据。

C语言中,指针就是变量的地址。

// 定义一个整型变量a,赋值为3
int a = 3;
// &运算符获取变量a的地址
printf("%o",&a); 

在这里插入图片描述

二、指针变量是什么?

一个变量的值是另一个变量的地址,且变量类型相同,则称该变量为指针变量。

// 定义一个整型变量a,赋值为3
int a = 3;
// 定义一个指针变量p,并初始化为NULL值
int* p = NULL;
// 将a的地址赋值给p
p = &a;

在这里插入图片描述
注:

  1. 指针变量定义时,也会被分配内存空间;
  2. *号表示所定义的变量为指针变量;
  3. 改变指针变量的值实际上是改变指向;
  4. 指针变量的类型必须与指向的变量类型保持一致。

三、知识拓展

变量在内存中所占存储空间的首地址,称为该变量的地址;而变量在存储空间中存放的数据,即变量的值。

野指针:
当指针指向的栈内存空间被释放后,指向它的指针并未消亡,内存被释放后,指针的值其实并没有改变,他仍然指向这块内存,只不过内存中存储的数据变成了随机值(乱码)而已。释放内存的结果只改变了内存中存储的数据,使该内存存储的内容成为垃圾,指向垃圾内存的指针,被称为野指针。
内存被释放后,指向它的指针不会自动变成空指针,野指针不是空指针。


总结

学习c语言必须先搞懂指针和指针变量的区别,避免进入误区,才会更加有利于后面对指针的操作和运算的理解及应用。

猜你喜欢

转载自blog.csdn.net/weixin_48627356/article/details/123758920