形象的说,大家都知道“邮箱”与“邮箱里的信件”的关系吧!其实就是“地址”(指针)与“地址的内容”(指针指向的内容)的关系!
指针的概念更像一个邮递员!
至于老K说的:指针不是地址,指什变量的值是一个地址.
解释下:
大家还记得高中数学中一个概念吗:向量(物理称 矢量)
向量有双要素:方向 和 模长
同样,指针 是 向量 的计算机化(就像是 数组 是 数列 的计算机化一样)
当定义一个 指针变量 的时候,计算机分配给它空间,用这个空间来存放地址
我们把一个值赋给一个变量,那么这个空间存放的值就是这个变量的值
同样道理,我们把一个地址(无符号整型)赋给一个指针变量,那么这个空间存放的地址就是这个指针变量的值
而这个概念就是 方向 !
而模长的概念就是 *p !
也许还有人听不明白,我用C语言程序来说明:
我们常常利用 指针 来改变被传递到自定义函数的值(实参),让 改变的值 返回主函数!
而这个 改变的值 是指针所指向的 地址上 的 改变的值 (红色部分代码)
而 不是 改变了 指针的指向 (蓝色部分代码)!
#include<stdio.h>
int main()
{
int *p,*q,a=1,b=2;
int change(int *,int *);
p=&a;q=&b;
change(p,q);
printf("%d,%d\n",*p,*q);
getch();
return 0;
}
int change(int *x,int *y)
{
int *z;
z=x;x=y;y=z;//这里改变了指针的地址,但是结果却没有改变,因为指针的值是地址,是不会被传递回主函数的
}
PS:
int change(int *x,int *y)
{
int z;
z=*x;*x=*y;*y=z;//它改变了指针所指向的值,但是没有改变指针的地址!
}
注意蓝色部分如果把 *z 改成 z (或者红色部分 z 改成 *z )都是不可以的!
因为int *z;那么z的空间就是用来存放地址,虽然你也可以认为这样可以传递,但是如果是聪明的编译器就会警告,不聪明的编译器就会报错
所以还是请大家规范书写!
[此贴子已经被作者于2007-8-7 15:24:42编辑过]