指针数组的定义

  如果数组的元素都是指针类型,那么我们就把这种叫做指针数组。指针数组是如下定义的:

  类型名字  *数组名[常量表达式]

  我们以前学习的时候知道如果数组的元素如何是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 <stdio.h>

void main()
{
char *aStringA[]=
{
"I'm not afraid to take a stand",
"We'll walk this road together, through the storm",
"Whatever weather, cold or warm"
};

char aStringB[][60]=
{
"I'm not afraid to take a stand",
"We'll walk this road together, through the storm",
"Whatever weather, cold or warm"
};

}

对于这个例子呢!如何输出的话。2个结果都一样的!但是它们有什么区别呢?!大家好好回忆下我之前的笔记,然后我们做以下区别的总结:

1,第一个数组字符串在常量区,第二个数组字符串在栈区。

2,第一个数组的长度是12字节,第二个数组长度是180字节。

3,第一个数组就像高级语言的变长数组,第二个数组就相当于定长数组拥有很快的寻址能力

4,第一个数组做元素交换很方便,只需要交换指针。第二个数组做交换就得把整个元素都抄下来然后交换

 

作者: dodolook 发表于 2011-06-24 19:03 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"