• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

大佬罗的博客

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

如何理解及定义指针 指针系列之二

 

                                   如何理解及定义指针

                                                                         指针系列之二

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

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  阅读(1222)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3