三言两语,妙说《指针》

出处:Examlink 作者:刀断水 日期:2007年08月28日 09时51分
                

  向量有双要素:方向 和 模长

  同样,指针 是 向量 的计算机化(就像是 数组 是 数列 的计算机化一样)

  当定义一个 指针变量 的时候,计算机分配给它空间,用这个空间来存放地址

  我们把一个值赋给一个变量,那么这个空间存放的值就是这个变量的值

  同样道理,我们把一个地址(无符号整型)赋给一个指针变量,那么这个空间存放的地址就是这个指针变量的值

  而这个概念就是 方向 !

  而模长的概念就是 *p !

  也许还有人听不明白,我用C语言程序来说明:

  我们常常利用 指针 来改变被传递到自定义函数的值(实参),让 改变的值 返回主函数!

  而这个 改变的值 是指针所指向的 地址上 的 改变的值 (红色部分代码)
  
  而 不是 改变了 指针的指向 (蓝色部分代码)!

  #include<stdio.h>
  int main()
  {
    int *p,*q,a=1,b=2;
    int change(int *,int *);
    p=&a;q=&b;
    change(p,q);
    printf("%d,%d\n",*p,*q);
    getch();
    return 0;
  }
  int change(int *x,int *y)
  {
    int *z;
    z=x;x=y;y=z;//这里改变了指针的地址,但是结果却没有改变,因为指针的值是地址,是不会被传递回主函数的
  }

  PS:

  int change(int *x,int *y)
  {
    int z;
    z=*x;*x=*y;*y=z;//它改变了指针所指向的值,但是没有改变指针的地址!
  }

  注意蓝色部分如果把 *z 改成 z (或者红色部分 z 改成 *z )都是不可以的!

  因为int *z;那么z的空间就是用来存放地址,虽然你也可以认为这样可以传递,但是如果是聪明的编译器就会警告,不聪明的编译器就会报错

  所以还是请大家规范书写!

最后更新时间:2008-05-28 12:13:27
文章评论
共有 0 位网友发表了评论
用户名: 新注册) 密码: 匿名评论 [查看所有评论]

评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
您可以用以下几种方式找到此文章

考试全流程