C语言指针详解

C语言指针详解

 

曾经有很多同学问过我关于C语言指针的问题。我自己刚开始接触C语言的时候也非常迷惑。指来指去头就有点晕。后来我第二次翻我那本教程的时候,看到一句话,才对指针豁然开朗。那句话就是“指针,就是一个存着地址的变量”。

       这句话很简洁,也很概括地指出了指针式什么东西。指针其实就是一个变量,跟我们用int a;char b;定义的变量没有什么区别。那么为什么指针可以指来指去呢,那就是因为指针里面记录的是一个地址呀。举个例子好了,假设我在一张纸条上写下了一个地址:“浙江省,杭州市,江干区,下沙镇,杭州电子科技大学”。那么在这个例子里面的“纸条”就是指针,因为“浙江省,杭州市,江干区,下沙镇,杭州电子科技大学”这个“地址”存储在里面。请注意了,“浙江省,杭州市,江干区,下沙镇,杭州电子科技大学”仅仅是一个“地址”,除此之外,再没有别的了。那么这个指针指向的是什么呢?自然是“杭州电子科技大学”这个“大学”。这时候怎么就成了大学了?因为“杭州电子科技大学”这所大学存在于“浙江省,杭州市,江干区,下沙镇,杭州电子科技大学”这个地址上啊。

       看了上面的例子,应该对指针有个模糊的概念了吧。还不清楚,也没关系,我们接着往下面看。

       我们知道在C语言里面,变量都是有类型的,比如整型的变量,字符型的变量,浮点型等等。而指针是什么?就是跟他们同样的,也是一种类型的变量。如果不明白的话,就大声的对自己说几遍“指针就是一个变量, 指针就是一个变量,指针就是一个变量…..哦,原来指针就是一个变量啊!”如果你愿意的话,也可以把指针叫做“指针变量”,虽然看上去区别不大,却可以时刻提醒“指针就是一个变量”这样一个真理。

       现在让我们暂时得抛弃变量的类型这个概念,我们当所有的变量都是一样的,没有类型的区别,而且所有的变量存储的都是一个数字。为了方便书写,我把所有的变量都写作int.

假设我们有如下的代码:

int a;

int b;

int c;

a=5;

b=&a;/*&是取地址符,&a表示的就是a的地址(a就想当于上面例子里面的“杭州电子科技大学”,&a的意思就是让你把“杭州电子科技大学”的地址写出来。至于地址怎么得到那就不是程序员关心的问题了,比如你可以百度搜索,你也可以直接问我们校长)*/

这时候,我如果

printf(“%d”,b)//,输出的会什么呢?

/*会是5吗?不会,因为我们没有给他赋值5啊,我们给他赋的值是&a,,那自然就是a的地址了。至于这个地址是什么呢?这就没有必要管了,你只要知道有了这个地址就能找到a就对了。你想,如果你把上面那张“字条”,交给一个不识字的大爷,然后叫他去看看哪里有什么,那大爷怎么办?我想:大爷可能会拦下一辆出租车,然后把字条交给司机说“送我去这个地方”,然后大爷就去了这个地方,看到了那里原来建造了一所大学*/

那如果

printf(“%d”,*b)

又会输出什么呢?这你就得问大爷了。大爷看到了什么,一所大学。所以这里输出的就是a,也就是5.

而这里呢,b就是一个指针变量,我们可以看到,他的用法跟别的变量也没什么区别。



文章来自: 本站原创
Tags:
评论: 0 | 查看次数: 8152