您的位置:首页 > 其它

什么是指针?

2012-05-05 16:48 417 查看
如果在程序中定义了一个变量,在对程序进行编译时,

系统会根据程序中定义的变量类型,分配一定长度的空间。

例如,Visral C++为整形变量分配4个字节,

         对单精度浮点型变量分配4个字节,

         对字符变量分配1个字节。

内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。

在地址所标志的内存单元中存放的数据则相当于旅馆房间中居住的旅客。

由于通过指针能找到所需的变量单元,可以说,“地址指向该变量单元”。

由于地址能够指向该变量单元,故形象的将“地址”称为“指针”。

意思是通过它能够找到以它为地址的内存单元。

int *i_pointer;

指针变量名 指针变量内容

i_pointer *i_pointer

2000 3

上面的2000是地址,3是地址中内容。

在定义指针变量时一定要声明类型,为什么呢?

如果想通过指针引用一个变量,只知道地址(2000)是不够的,

因为无法判定是从地址为2000的一个字节中取出一个字符数据,

还是从2000和2001两个字节取出short型数据,还是从2000

到2003四个字节中取出int或者float型数据。

函数参数也可以是指针类型,

它的作用是将一个变量的地址传送到另一个函数中。

通过指针引用数组和字符串》》》》》》》》》》》》》

通过指针引用数组元素。

(1)下标法, a[i];

(2)指针法,*(a+i) 或 *(p+i)。其中p=a;

那么现在的p就指向了数组a的首地址。

通过指针引用字符串

(1)char string[]="I Love You";

(2)char *string="I Love You";

那么现在string指针就指向了"I Love You"的第一个字符的首地址。

指针数组》》》》》》》》》》》》》》》》》》》》

由于[]比*的优先级要高,因此,在定义数组指针的时候

我们要写成int (*p)[10];

而不能写成int *p[10];

这是指针数组的定义,那么它有什么用呢?

指针数组比较适合用来指向若干个字符串,

使字符串处理更加方便灵活。例如:

图书馆有一些书,想把这些书的书名存入起来

以便于查找和排序。

按一般的方法字符串本身就是一个字符数组。因此

我要设计一个二维的字符数组才能存放多个字符串。

但是在定义二维数组时,需要指定列数,也就是说

二维数组中每一行包含的元素个数相等。而实际上

字符串的长度一般是不相等的。如按最长的字符串

来定义列数,则会浪费许多内存单元。

char *name[]={"Follow me", "BASIC", "Great Wall"};

那么name[0]指针就指向了“Follow me”的第一字符的地址。

同样的道理……

多重指针》》》》》》》》》》》》》》》》》》》》

char *p

p >> string; 也就是说p地址直接指向字符串。

char **p;

(p = 某个地址) >> string;也就是说p地址指向的是存入string串的地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: