怎样理解C语言指针
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怎样的地址里。这就是函数改变传入参数的值。
(上)