您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VC > 正文
Visual C++初学者指针学习指南
[文章信息]
作者:CQFZ
时间:2005-02-01
出处:天极BLOG
责任编辑:方舟
[文章导读]
指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据……
advertisement
热点推荐
· 使用VC++ ATL实现Office的COM插件
· 软件多媒体教程录制方法详解
· 1月31日软件精选 邮箱及IE安全设置指南
· “金闪客奖”获奖名单隆重公布
· PS色彩调整简明教程:色阶
[正文]

1 2 3 4 5  下一页

  何为指针?

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

  开始

  如何定义一个指针?呃,就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,下面的代码创建了两个指向整数的指针:

  int* pNumberOne;

  int* pNumberTwo;

  注意到变量名的前缀“p”了吗?这是编写代码的一个习惯,用来表示这个变量是一个指针。

  现在,让我们把这些指针指向一些实际的值吧:

  pNumberOne = &some_number;

  pNumberTwo = &some_other_number;

  “&”标志应该读作“the address of(……的地址)”,它的作用是返回一个变量的内存地址,而不是这个变量本身。那么在这个例子中,pNumberOne就是some_number的地址,亦称作pNumberOne指向some_number。

  现在,如果我们想使用some_number的地址的话,那么我们就可以使用pNumberOne了。如果我们希望经由pNumberOne而使用some_number的值的话,我们可以用*pNumberOne。“*”应该读作“the memory location pointed to by(由……指向的内存位置)”,它用来取得指针所指向的值。不过指针声明的情况例外,如“int *pNumber”。

  到现在都学到什么了(一个例子)

  咻!要理解的东西太多了,所以在此我建议,如果你还是不理解以上的概念的话,那么最好再通读一遍;指针是一个复杂的主题,要掌握它是要花些时间的。

  这里有一个示例,解说了上面讨论的那些概念。它是由C编写成,并不带有C++的那些扩展。

  #include

  void main()

  {

  // 声明变量:

   int nNumber;

   int *pPointer;

   // 现在,给它们赋值:

   nNumber = 15;

   pPointer = &nNumber;

   // 打印nNumber的值:

   printf("nNumber is equal to : %d\n", nNumber);

   // 现在,通过pPointer来控制nNumber:

   *pPointer = 25;

   // 证明经过上面的代码之后,nNumber的值已经改变了:

   printf("nNumber is equal to : %d\n", nNumber);

   }

  请通读并编译以上代码,并确信你已经弄懂了它是如何工作的。然后,当你准备好了以后,就往下读吧!

  陷阱!

  看看你是否能指出以下程序的缺陷:

  #include

  int *pPointer;

  void SomeFunction()

  {

   int nNumber;

   nNumber = 25;

   // 使pPointer指向nNumber:

   pPointer = &nNumber;

  }

  void main()

  {

   SomeFunction(); // 让pPointer指向某些东西

   // 为什么这样会失败?

   printf("Value of *pPointer: %d\n", *pPointer);

  }

  这个程序首先调用SomeFunction函数,在其中创建了一个名为nNumber的变量,并且使pPointer指向这个变量。那么,这就是问题之所在了。当函数结束的时候,由于nNumber是一个本地变量,那么它就会被销毁。这是因为当语句块结束的时候,块中定义的本地变量都会被销毁。这就意味着当SomeFunction返回到main()的时候,那个变量就已经被销毁了,所以pPointer将会指向一个不再属于本程序的内存位置。如果你不懂这一点,那么你应该去读一读有关本地变量、全局变量以及作用域的东西,这些概念非常重要。

  那么,如何解决这个问题呢?答案是使用一种名为动态分配的技术。请注意:在这一点上,C和C++是不同的。既然大多数开发者正在使用C++,那么下面的代码就使用C++来编写。


1 2 3 4 5  下一页

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • VC中利用FTP协议实现多线程断点续传
  • 防止Visual C++应用程序缓冲区溢出
  • MFC程序员的WTL指南之WTL 界面基类
  • MFC程序员的WTL开发指南之ATL界面类
  • ATL布幔下的秘密之窗口类的秘密
  • 安捷伦在华投资将超1亿美元 押宝手机市场
  • 台积电获中芯国际1.75亿美元 赢面子赔里子
  • 海尔集团成功海外借壳 张瑞敏未入管理层
  • 西南贝尔终结AT&T 全美最大电信运营商诞生
  • DTS否认在华违法经营 反驳专利许可垄断说
  • 白宫闹大笑话 布什任职演说中文版成搞笑版
  • 盖茨巴菲特赌美元贬值 最富二人组一唱一和
  • 茁壮网络获Macromedia授权 为内地首家企业
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    温馨祝福|极品爆笑|生肖属相|StarQ|体育竞技|美好风光|每逢佳节
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 冲动的惩罚
    最熟悉的陌生人 绿光
    可爱女人 盛夏的果实
    当你孤单你会想起谁 孤单北半球
    2002年的第一场雪 眉飞色舞
    有多少爱可以重来 挪威的森林
    最浪漫的事 老板电话

    CSEEK搜索