如何理解及定义指针

                                                                         指针系列之二

各种书本是如下介绍指针的,不知那种你理解起来会容易些。

1:一个指针变量是一个“指”向另一个变量或函数的变量,指针本身并不像intfloat类型的变量那样直接存储一个值,但它所指向的变量可以直接存有一个值,当经过指针变量存取这个值时,实际是通过“间接”方式存取这个值

2指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据,而是包含了一个指向内存位置的地址,你可以在这个地址找到某些信息。这是一个很重要的概念,并且许多程序或者思想都是将指针作为它们的设计基础,例如链表。

3指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区

当然会有些其他的介绍,基本上差不多,我的理解就是指针指向(理解为“存储”可能不太准确)了一个变量的地址而非变量本身。

看下面的指针定义:

int * pint1;

 

注意*pint1中的p定义一个指针就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,上面的代码创建了一个指向整数的指针;变量名前的“p”前缀这是程序员通常在定义指针时的一个习惯,以提高便程序的阅读性,表示这是个指针

一个指针变定义后并不能马上使用,它必须要初始化,否则指针不知道指向何方,乱用没有初始化的指针是很危险的,在vc中使用未初始化的指针会产生运行异常错误。

int  xx;

pint1=&xx;

&”号读作什么的地址,它表示返回的是变量在内存中的地址而不是变量本身的值。在这个例子中,pint1 等于xx的地址,所以现在pint1指向xx。如果现在我们在程序中要用到xx,我们就可以使用pint1

int  xx0;

pint1=&xx;

 

*pint1=100;

xx的值就被改变为100

 

也可以采用如下动态分配来初始化指针

int  xx

int * pint1;

pint1=new int;     //只分配空间,但不给出初始值

vcpint1=new int(100);  //分配空间,同时给出初始值100

这样下面语句成立

xx=*pint

xx的值变为100

在动态分配的情况下 pint指向动态分配到的地址与xx的地址无关

所以当

xx200;后

*pint1的值不会改变,同时若

*pint1=10000;

xx的值也不会变成10000,除非使用

*pint1=xx;

xx*pint1;来改变

或强行改变pint1的指向 pint1&xx;

 

相关文章: