【指针】有哪些类型?
字符指针
从名字可以直接看出来,字符指针是用来存放字符或者字符串的指针
在指针类型中,我们提到过 char* 类型,它就是字符指针:存放单个字符,或者存放一整个字符串的指针类型。
指针 pc 中存储了变量 ch 中‘w’字符的地址
对于第一次见到存储字符串的指针,我们首先要进行分析设问:①“abcdef”字符串是存储到了指针变量 pch 中么?(假设是在 32 位环境下)分析:在 32 位环境下,char*类型指针大小才 4 字节,而字符串“abcdef”有六个字节,明显存储不下,所以这个问题解决了。
②那存储的会是字符串的首元素‘a’的地址么?通过代码来验证:
验证*pch 中存储的地址是否是 a
指针数组
指针数组的概念:用于存放数组地址的指针
创建形式: 类型 (*name)[size]
这里一不小心特别容易写成指针数组,这就是为什么我要在这一篇再一次提起指针数组的原因,它们二者的区别请看图:
数组名
实战先再解决一个问题,概念说数组指针是存放数组地址的,那如何取得数组地址呢?是我们之前文章提及的简简单单用 arr 代表整个数组的地址么?还是用* &arr?
整一个数组地址
①sizeof(arr)其中的 arr 代表整一个数组
②&arr,可以取出整一个数组的地址
首元素地址
平常中直接写出 arr 其代表数组中首元素地址
应用
上述代码详解:
p:指针中存储的是整个数组的地址
*p:对 p 进行解引用,得到的是 arr,而 arr 又代表数组的首元素地址
*p+i:代表数组下标为 i 的元素地址
*(*p+i):代表下标为 i 的元素
但是!这样子运用起来其实特别别扭,我本来直接传 arr 首元素的地址还更加方便的打印,为何要这么绕来绕去,所以,数组指针一般不应用在一维数组中,反言之,数组指针一般应用在二维数组中。
经过上面的例子我们可以对解引用做个初步的总结:对解引用的初步总结
arr[i] == * (arr+i)
arr[i][j] == *(arr+i)[j] == * ( * (arr+i)+j )
版权声明: 本文为 InfoQ 作者【Geek_65222d】的原创文章。
原文链接:【http://xie.infoq.cn/article/039b137d409f66dadf10c7a68】。未经作者许可,禁止转载。
评论