字体
第(1/6)页
关灯
   存书签 书架管理 返回目录
    ip:

    ip=&i;

    此时指针变量 ip 指向整型变量 i,假设变量 i 的地址为 1800,这个赋值可形象理解为下

    图所示的联系。

    以后我们便可以通过指针变量 ip 间接访问变量 i,例如:

    x=*ip;

    运算符*访问以 ip 为地址的存贮区域,而 ip 中存放的是变量 i 的地址,因此,*ip 访问的

    谭浩强      C 语言程序设计               2001 年 5 月 1 日

    是地址为 1800 的存贮区域(因为是整数,实际上是从 1800 开始的两个字节),它就是 i 所占用

    的存贮区域, 所以上面的赋值表达式等价于

    x=i;

    另外,指针变量和一般变量一样,存放在它们之中的值是可以改变的,也就是说可以改变

    它们的指向,假设

    int i,j,*p1,*p2;

    i='a';

    j='b';

    p1=&i;

    p2=&j;

    则建立如下图所示的联系:

    这时赋值表达式:

    p2=p1

    就使 p2 与 p1 指向同一对象 i,此时*p2 就等价于 i,而不是 j,图所示:

    如果执行如下表达式:

    *p2=*p1;

    则表示把 p1 指向的内容赋给 p2 所指的区域, 此时就变成图所示

    谭浩强      C 语言程序设计               2001 年 5 月 1 日

    通过指针访问它所指向的一个变量是以间接访问的形式进行的,所以比直接访问一个变

    量要费时间,而且不直观,因为通过指针要访问哪一个变量,取决于指针的值(即指向),例如

    "*p2=*p1;"实际上就是"j=i;",前者不仅速度慢而且目的不明。但由于指针是变量,我们可以

    通过改变它们的指向,以间接访问不同的变量,这给程序员带来灵活xìng,也使程序代码编写得

    更为简洁和有效。

    指针变量可出现在表达式中, 设

    int x,y,*px=&x;

    指针变量 px 指向整数 x,则*px 可出现在 x 能出现的任何地方。例如:

    y=*px+5;  /*表示把 x 的内容加 5 并赋给 y*/

    y=++*px;  /*px 的内容加上 1 之后赋给 y,++*px 相当于++(*px)*/

    y=*px++;  /*相当于 y=*px; px++*/

    【例 10.1】

    main()

    { int a,b;

    int *pointer_1, *pointer_2;

    a=100;b=10;

    pointer_1=&a;

    pointer_2=&b;

    printf("%d,%d\n",a,b);

    printf("%d,%d\n",*pointer_1, *pointer_2);

    }

    对程序的说明:

    1) 在开头处虽然定义了两个指针变量 pointer_1 和 pointer_2,担它们并未指向任何一个

    整型变量。只是提供两个指针
上一章 目录 下一页