WWW.LOUGH.COM.CN

加入收藏 | 设为首页 | 联系站长
首页 | Java | C&C++ | 数据库 | 经验交流
论坛首页 | 综合区 | 贴图区 | 狐朋狗友 | 学习区 | 站务区
博客首页 | IT技术 | WebServices | Hibernate | Java设计模式 | Struts | AJAX | 数据库
首页 | 中华古籍 | 网络原创 | 随记

C++浅谈指针

C++浅谈指针

原作:happycock@CSDN

    此文仅适合初学C 语言的朋友,凡是学了几个月以上的不要对此文内容嗤之
以鼻。

    C 语言最具特色的是什么?指针。这个答案好像是公论,无论高手还是低手,
菜鸟还是老鸟,学过的还是没学过的,但凡是听说过C 的,都能回答出来。正是
因为C 引入了指针的概念,使得他是最接近机器真实模型的高级语言,以至于得
到了“中级语言”的称号;象我这样有时候汇编比C 用的还多的人体会的更深—
—单片机编程,我只会汇编,虽然现在开始学C ,还是觉得怪怪的。

    因此,指针是学习C 必须掌握的,如果你畏惧它,不如换一门没有指针的语
言。下面有个小例子,希望你能从中得到一些启发。

#include <stdio.h>

void main()
{
    int a = 10000;/*-------1*/
    int* p, d;    /*--------------2*/
    p = &d;       /*---------------3*/
    p = (int*)a;  /*-----------4*/
    printf("%d %d", a, *p);
}

我来简单讲解一下:

是这样写int *p好还是这样写int* p好?

    这两种用法都是可以的,并且每种写法都有拥护者。指针运算符是向右结合
的,如果你象2 语句那样写,实际上d 还是int 类型,而不是指针类型,赞成int
*p写法的,就是出于这个原因。你说我把int*用括号括起来不就行了,但是编译
器会把这样的写法当成是类型转换,而不是类型定义。赞成int* p写法的,原因
就是直观,很清晰的表示p 是个整型的指针。例如这样的写法int* p = &a ;换
成int *p = &a ;就很让人费解。为了避免象2 语句的误解,有个规则就是,一
行只定义一个指针。

    具体怎样写,要看个人习惯,每种写法人们都是认可的。

指针的危险性

    指针实际上就是一个存有内存地址的变量,用指针访问就相当于间接寻址。
很显然,你可以给指针赋不同的数值,这样就能访问任意的内存——太危险了,
例如4 语句。在16位系统中,你对这种使用毫无办法。幸运的是,在32位系统中,
这种使用被禁止了。

指针的类型

    你说指针不就是一个存有内存地址的变量吗,既然都是“内存地址”类型,
干什么还要类型啊。但是需要注意的是,当你从指针还原的时候,它指向的那块
内存,究竟是按照整型来用啊还是别的什么结构?从这个角度来说,当你很清楚
指针指向的内存的内容,做指针类型变换也是允许的。

    关于指针,每本C 语言书籍都有很详细的介绍,我就不再多说了。当你粗浅
的了解汇编的时候,相信你会对指针有更深刻的理解。



关于我们 | 站点地图 | 免责声明 | 联系我们 | ©2003-2007 Lough.com.cn 京ICP备06060948号