原文地址:我的个人博客点击查看
C语言教程第二弹——指针详解
所有学过C语言的人都知道,C语言难在它的指针的使用和理解,今天,我带给大家C语言的指针的教程,供大家学习交流,如果有讲的不对的地方,请给作者邮箱留言(邮箱在底部)。
指针是什么?指针是指向某个变量、某个元素、某个对象等的一个值,我们可以浅显的理解为:指针变量中存放了某个变量的地址,*号是寻址的符号。
让我们看一个简单的例子:
上面的例子中,我们定义了一个整型的变量a=5,又定义了一个指向整型变量a的指针p,注意!我说的是指向整型的指针,而不是一个整型的指针,这是有很大的区别的。
指针的长度是固定的,都是32位的长度(32位的长度指的是占用32个二进制,最大为2的32次方-1),如果不相信,可以运行下面的代码尝试一下:
#include<stdio.h>
void main()
{
int a = 5;
int *p = &a;
char b = 's';
char *pb = &b;
printf("p = %d\r\n", p);
printf("pb = %d\r\n", pb);
}//代码经过测试可以运行。
它的输出结果中,指向整型的长度和指向字符型的指针的大小差别不大,所以,希望大家能理解这句话:C语言中的指针长度是固定的(如果感兴趣记一下长度是32位),不论指向的内容是什么类型,指针的长度都是一样的。
所以,上文中,我称指针p为:指向整型的指针。
OK,如果大家理解了上文,我们就继续向下看,我们定义了一个整型的变量a=5,又定义了一个指向整型变量a的指针p(&符号用在这里是取地址符号,可以拿到某个变量的地址),然后打印了a的值,使用 *p=10 赋值为10,在这里,*符号指的是:去地址p中修改。(当然这不是术语,只是为了大家便于理解。)然后我们打印了a的值,发现a的值变化了。
这就是指针的神奇之处,我们可以完全不触碰原变量,间接的修改那个变量的值,指针的实质也是需要大家理解的,在这之前,我们必须理解变量声明时系统做了什么事情!!!!!!!
当我们声明变量时,系统做了什么?
当执行第一句话时,程序申请了一块内存,假设这块内存的地址是20000(实际中不会这么巧,假设值),这块内存命名为a,里面存放的值为5。
当执行第二句话时,程序又申请了一块内存,这块内存的地址暂且不谈,命名为p,里面存放了变量a 的地址,所以,我们可以通过寻址符号(*)来寻找到我们的变量a 的内存空间,直接修改里面的数据。
同学问我指针的问题时,我更倾向于举这个例子:有一个人,叫a ,他家住在XX省XX市XX县XX村,他有5块钱,现在有一个公务员p ,他使用& 符号找到了a 的地址,公务员p 接到任务,要把这个人a 的钱修改为10 块钱,他就驾驶自己的汽车(*)找到了a 的存放钱的地方(寻址),然后修改为10 (*p = 10),最后a 的余额就是10 块钱了。
由于指针相对比较难学,今天的指针的讲解就到这里,以后继续补充指针的知识,如果大家还有不懂得,欢迎发邮件咨询问题,祝大家天天开心^_~。