如何理解及定义指针 指针系列之二
如何理解及定义指针
指针系列之二
各种书本是如下介绍指针的,不知那种你理解起来会容易些。
1:一个指针变量是一个“指”向另一个变量或函数的变量,指针本身并不像int或float类型的变量那样直接存储一个值,但它所指向的变量可以直接存有一个值,当经过指针变量存取这个值时,实际是通过“间接”方式存取这个值
2:指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据,而是包含了一个指向内存位置的地址,你可以在这个地址找到某些信息。这是一个很重要的概念,并且许多程序或者思想都是将指针作为它们的设计基础,例如链表。
3:指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区
当然会有些其他的介绍,基本上差不多,我的理解就是指针指向(理解为“存储”可能不太准确)了一个变量的地址而非变量本身。
看下面的指针定义:
int * pint1;
注意*及pint1中的p,定义一个指针就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,上面的代码创建了一个指向整数的指针;变量名前的“p”前缀这是程序员通常在定义指针时的一个习惯,以提高便程序的阅读性,表示这是个指针
一个指针变定义后并不能马上使用,它必须要初始化,否则指针不知道指向何方,乱用没有初始化的指针是很危险的,在vc中使用未初始化的指针会产生运行异常错误。
int xx;
pint1=&xx;
“&”号读作“什么的地址”,它表示返回的是变量在内存中的地址而不是变量本身的值。在这个例子中,pint1 等于xx的地址,所以现在pint1指向xx。如果现在我们在程序中要用到xx,我们就可以使用pint1。
int xx=0;
pint1=&xx;
*pint1=100;
则 xx的值就被改变为100
也可以采用如下动态分配来初始化指针
int xx;
int * pint1;
pint1=new int; //只分配空间,但不给出初始值
或vc下pint1=new int(100); //分配空间,同时给出初始值100
这样下面语句成立
xx=*pint
xx的值变为100
在动态分配的情况下 pint指向动态分配到的地址与xx的地址无关
所以当
xx=200;后
*pint1的值不会改变,同时若
*pint1=10000;
xx的值也不会变成10000,除非使用
*pint1=xx;
或xx=*pint1;来改变
或强行改变pint1的指向 pint1=&xx;
posted on 2005-05-23 08:59 Richinger 阅读(1209) 评论(0) 编辑 收藏 举报