我也要学C语言-第十七章:指针数组
指针数组的定义
如果数组的元素都是指针类型,那么我们就把这种叫做指针数组。指针数组是如下定义的:
类型名字 *数组名[常量表达式]
我们以前学习的时候知道如果数组的元素如何是char型,那么这个就是char型数组,如何数组元素都是int型,那么这个就叫int型数组,在这里呢,如果数组元素都是指针,那么这个就是指针数组。
大家发现没有,指针数组也没有什么特别的,只是它的元素都是指针。那么我们在使用它的时候就和其他整型数组没有太大的区别。
例子: int *x[10]
通过前面的解释,那么我很容易回到道这个是表示,x是一个数组,里面有10个元素,每个元素是一个指针指向整型。嘿嘿!是不是很简单啊!原来就是把指针放数组里啦!就好比以前“串串香竹签”上的土豆编程了指针了。指针是一种抽象,在计算机中用来表示地址加其解释方式。
那么我们现在思考一个问题啊,这个int *x[10]求长度会是多少呢,嘿嘿!聪明的你1下子就想到了,指针嘛!在32位系统中是4字节的,那么这里有10个,那就是40字节啦!
指针数组的主要应用
指针数组从它的定义我们便知道它是主要用来管理同种类型的指针,其实最常见的就是用来管理字符串。
现在呢,我们还是老办法,先看指针数组的内存形式,这样我们再应用就会思路更清晰啦!大家是不是觉得指针数组很好玩啊!aString数组里面放的3个4字节指针啦!。大家一定要注意啊,上面的和 char aString[]="............" 这样的形式是不一样的啊,这种形式是把字符串放在数组里的哦!指针数组中数组里放的只是指针哦!是指向字符串的指针,也就是字符串的首地址。那么我们现在去看看真正的字符串在哪里啊,嘿嘿,大家一看地址就知道啦,第一个字符串的地址是00422080啊,然后依次挨着放的。好,我们去那个地址看看,到底是不是这样啦!
呵呵!大家看到了吧!数组里面全部是记录的指针吧!
一个很必要的对比
下面大家来看1个例子,我们来仔细分析下:
#include void main() { char *aStringA[]= { "Im not afraid to take a stand", "Well walk this road together, through the storm", "Whatever weather, cold or warm" }; char aStringB[][60]= { "Im not afraid to take a stand", "Well walk this road together, through the storm", "Whatever weather, cold or warm" }; }
对于这个例子呢!如何输出的话。2个结果都一样的!但是它们有什么区别呢?!大家好好回忆下我之前的笔记,然后我们做以下区别的总结:
1,第一个数组字符串在常量区,第二个数组字符串在栈区。
2,第一个数组的长度是12字节,第二个数组长度是180字节。
3,第一个数组就像高级语言的变长数组,第二个数组就相当于定长数组拥有很快的寻址能力
4,第一个数组做元素交换很方便,只需要交换指针。第二个数组做交换就得把整个元素都抄下来然后交换
补充:软件开发 , C语言 ,