理解C语言指针

来源:互联网 发布:linux ffmpeg与lame 编辑:程序博客网 时间:2024/04/29 21:56

C语言指针的理解
C语言的指针历来是一个不好理解的概念。C语言的指针是一种变量。这个变量只能存放无符号整数。从这点讲它与是要与无符号整数没有什么区别。你完全可以把它用做无符号整数。但是,这样用就失去了它的作用。那它有什么特别的用处呢?这个请先思考下面几个问题。
1  怎样让函数返回多个参数?
2  怎样让函数改变传入参数的值?
3  怎样让系统动态的为程序增加变量空间?
4  怎样实现一个回调函数?
以上这些问题都可以使用指针来完成。
我们程序中的变量都放在内存了。具体内存哪里?这个位置就是内存地址。
例如我们在程序中定义了一个变量
   int myVar;
   myVar=123;
编译程序将它指定到地址xxxx。myVar=123;的执行过程就是把123存入到xxxx
step  1
                    |      :          |
                    |      :          |
                    |      :          |
            xxxx |                 |
                    |      :          |
                    |      :          |
 
step  2
                     |      :          |
                     |      :          |
                     |      :          |
             xxxx |123 |
                    |      :          |
                    |      :          |
                    |      :          |
如果我们输出
printf("myVar address=%d,value=%d/n",&myVar,myVar);
结构就是
myVar address=xxxx,value=123
我们接下来定义一个指针。
   int *mypoing;
   int myVar;
   myVar=123;
   mypoing=&myVar;
   *mypoint=321;
系统指定*mypoint存放在地址yyyy、myVar存放在地址xxxx。执行myVar=123。执行mypoing=&myVar。执行*mypoint=321就如同执行myVar=321。因为程序操作的是同一段地址。
step  1
                |      :          |
                |      :          |
                |      :          |
        xxxx |                 |
                |      :          |
        yyyy |                 |
 
step  2
                |      :          |
                |      :          |
                |      :          |
        xxxx |123          |
               |                  |
       yyyy |                  |
              ||      :          |

step  3
              |      :          |
              |      :          |
              |      :          |
      xxxx |                 |
              |                 |
      yyyy |xxxx          |
 
step  4
             |      :          |
             |      :          |
             |      :          |
     xxxx |321          |
             |      :          |
     yyyy |xxxx           |
            |      :           |
printf("myVar address=%d,value=%d/n",&myVar,myVar);
printf("*mypoint address=%d,value=%d/n",*mypoint,mypoint);
结果为:
myVar address=xxxx,value=321
*mypoint address=321,value=xxxx
我们来讲一下scanf()函数。这个函数能够把数据存放到我们指定的变量里。那么它是怎么做到的。scanf首先定义一下你要输入数据的类型。"%d"说明你输入一个整数。那么scanf就把从键盘输入的ascii吗转换成一个指数。放到哪里。放到你指定的变量里。你怎么指定的?就是你&myVar怎样的地址里。这就是函数改变传入参数的值。
(上)