指针详解

来源:互联网 发布:diy装修房子软件 编辑:程序博客网 时间:2024/06/05 05:39

简介:

本文主要讲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

原创粉丝点击