简介:
本文主要讲C/C++中的指针,指针具体分为6类,分别是一维指针,多维指针,指针数组,数组指针,指针函数,函数指针。每一种指针都可以是任意数据类型的指针,包括枚举类型,复合型数据类型(结构体指针,类指针)。不同类型的指针中存储的都是指向某一块内存的地址,不同的是 (*) 解星号运算不同,解星号运算的实质是将该指针指向的内存中的值解析出来,比如 int* 的解星号运算是解 该地址~该地址+4 共4字节的内容,char* 的解星号运算是解改地址处共1个字节的内容。int* + 1 世纪上是内存加4。
本文包括指针的功能,6大指针介绍,数组和指针的寻址几部分。
一、指针的功能:
1. 寻址
2. 动态申请内存
二、6大指针介绍:
1. 一维指针 *
主要用来寻址和动态内存申请,字符串名就是一维指针。
2. 多维指针 **,***等
主要用来动态申请内存,也可用于寻址,但很少用到。 多维数组的建立其实是一个数据结构的建立, 多维数组会建立一种数据结构——树。
3. 指针数组 [*]
就是一个数组,这个数组的数组元素是同类型的指针。指针数组,可以很容易就和多维指针联系起来,多维指针就是指向一个指针数组的指针。
4. 数组指针 (*)[]
指向数组的指针,(*)[]这种写法并不常用,主要用于寻址。[数组] 可以是任一类型的数组,普通数组、指针数组、结构体数组等。
5. 指针函数 void*
函数返回值为指针的函数。为了申请动态内存空间。
6. 函数指针 void (*pfn)()
指向函数的指针。这个是用来寻址的。
三、数组和指针的关系:
数组名就是一维指针。将数组名当成指针的用法在字符串操作中使用很广泛。
结束语:
C/C++ 语言的指针的能力非常强大,可以随心所欲地修改内存(只要你会寻址到你要修改的地址),char* 修改一字节内存,int* 修改8字节内存。当你能熟练使用指针,并将其和C语言中的强制类型转换结合在一起,你会发现指针的神奇之处。
参考资料:
-
https://www.zhihu.com/question/28483772/answer/40993590