学习C语言有一道绕不开的坎,那就是指针。很多初学者初次接触指针时会感到困惑,看不懂地址、分不清指针变量与普通变量。但不可否认,指针是C语言的灵魂,依托指针我们可以高效操作内存、灵活处理数组与字符串,也是后续学习结构体、动态内存、嵌入式开发的重要基础。本篇文章从零出发,循序渐进梳理指针核心知识点,拨开地址与指针的迷雾。 想必很多人都会有疑惑——指针到底是什么?七十指针就是内存单元的编号,即指针就是地址,它是一类特殊的数据,是具有指向意义的值。 1. 指针的定义 语法:基类型 * 指针变脸名; ①基类型---表示的是指针指向的那块内存空间存储的数据类型,可以是整型,浮点型,字符型,构造类型,指针类型,空类型。 ② * --- 相当于是个修饰符,用来说明是指针类型的变量,表示此时定义的不是普通变量,而是指针类型的变量。 ③指针变量名---是一个标识符,命名规则和普通变量的命名规则一致。 注意:基类型决定了指针变量中存放的是什么类型的地址。 2. 指针变量访问 例如int *p =&a,通过p本身能得到地址,通过地址能找到数据对应的内存空间。 指针运算符 * ,也叫间接访问运算,通过*p能够访问到a所在的空间。 运算过程: ①拿出p中的地址值到内存中定位 ②找到后从定位处开始,偏移sizeof(基类型)大小的一块空间 ③将这块空间当做一个基类型的变量来看 3. 指针的核心用途 在被调函数中,实现对主调函数中的数据的修改。要修改谁,就传谁的地址,在被调函数中,必须要有对应的*p运算。 注意:指针变量如果不初始化,则是随机值,而没有初始化的指针就叫做野指针。所以一般对于不初始化的指针都会用NULL来初始化。