刚开始学 C 语言的朋友,是不是一听到 “指针” 俩字就头大?看书上的指针概念像看天书,什么 “地址”“指针变量”“* 和 & 符号” 绕来绕去,越看越晕。试着写代码吧,要么程序直接崩了,要么结果乱七八糟,感觉自己根本不是学编程的料。其实啊,零基础学 c 语言指针真没那么难,今天兔子哥就从最基础的地址概念开始,一步一步拆解开,保证你能看明白,一起往下看吧!
先搞懂什么是地址,指针就不难了
要学指针,得先知道 “地址” 是啥。你可以把电脑的内存想象成一排小格子,每个格子都有个编号,这个编号就是地址。就像你家小区的每套房都有门牌号,内存的每个小格子也有自己的 “门牌号”—— 地址。
那为啥要有地址呢?因为电脑要找数据啊。比如你定义了一个变量 int a = 10,这个 10 就存在某个一个内存格子里,电脑通过地址才能找到它。要是没有地址,电脑想找这个 10,就像在小区里瞎转悠找一户户人家,根本找不到。
或许指针和地址啥关系?简单说,指针就是专门存地址的变量。就像你把朋友家的门牌号写在小本子上,小本子就相当于指针,上面的门牌号就是地址。这样说是不是清楚多了?
指针变量咋定义?一步一步来
知道了地址和指针的关系,接下来看看怎么定义指针变量。格式其实很简单,比如你想定义一个指向整数的指针,就写 int *p; 这里的 int 表示这个指针要指向整数类型的变量,* 是告诉电脑 “这是个指针”,p 就是指针的名字。
可能有人会问,为啥要加个啊?不加不行吗?还真不行。不加的话,int p 就是个普通的整数变量了,加了 * 才表示它是指针,专门存地址的。刚开始可能会忘,多写几次就记住了。
定义完指针,咋得让它指向一个变量才行,不然它就是个空本子,没用。比如你定义了 int a = 10; 想让指针 p 指向 a,就写 p = &a 这里的 & 是 “取地址” 的意思,&a 就是变量 a 的地址。这样一来,p 里就存着 a 的地址了,通过 p 就能找到 a。
指针怎么用?从简单例子入手
指针定义好了,咋用呢?比如你想通过指针看 a 的值,就用 * p,*p 就相当于 a。试一下:
int a = 10;
int *p = &a
printf ("% d", *p); // 这里会输出 10
是不是很神奇?p 就像通过小本子上的门牌号找到朋友家,然后看到家里的人。这时候要是改p 的值,a 的值也会变,比如 * p = 20; 这时候 a 就变成 20 了,因为它们指的是同一个内存格子。
不过话说回来,刚开始用的时候很容易搞混 p 和 * p。记住,p 是地址,*p 是地址里存的值,就像门牌号和家里的人,不是一回事。
实际应用:用指针操作数组试试
学会了基础用法,咱来看看实际应用。数组和指针关系可近了,用指针操作数组特别方便。比如你定义了 int arr [3] = {1,2,3}; 数组名 arr 其实就是数组第一个元素的地址,所以可以直接让指针指向它:int *p = arr;
这时候,p 就是 arr [0](也就是 1),(p+1) 就是 arr [1](也就是 2),以此类推。你看,用指针遍历数组多简单,不用写那么多下标了。
或许指针之所以能这么用,是因为数组在内存里是连续放的,指针往后挪一位,就到下一个元素了。不过具体为啥这么设计,可能得看 C 语言的底层实现,这部分我目前也在慢慢琢磨。
新手常踩的坑,你可别犯
学指针的时候,新手容易掉进去的坑不少,兔子哥给你提个醒:
- 别用没初始化的指针。刚定义了 int p; 就去用p,这时候 p 里是乱码地址,用了程序很崩才怪。
- 别随便指针指向的内存释放后还接着用。比如用 free (p) 释放后,记得给 p 赋值为 NULL,不然它就成了 “野指针”,指不定指到哪去。
- 别把和 & 搞反。取地址用 &,取值用,多练几次就顺了。
兔子哥觉得,零基础学指针,最忌讳上来就抠复杂概念。先把 “地址 - 指针 - 变量” 的关系搞明白,再动手写简单代码,比如用指针改个变量值、遍历个小数组,慢慢就有感觉了。
其实啊,指针这东西就像学骑车,刚开始总摔跤,练着练着就顺了。别害怕出错,错了就改,改一次就明白一点。每天花半小时琢磨一个小例子,一个星期下来,你肯定会觉得 “哦,原来指针也不过如此”。希望这些能帮到你,加油学吧!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~