刚学 C 语言的朋友,是不是一听到 “指针” 俩字就发怵?看书上的概念绕来绕去,什么 “地址”“内存”“指向”,越看越糊涂;想动手写代码,连指针都不知道怎么定义,更别说用了。其实啊,指针没那么玄乎,今天兔子哥就用 3 步,带你从零基础搞懂指针,学会核心用法,保证你看完就有头绪,一起往下看吧!
第一步:搞明白指针到底是个啥?为啥非要用它?
很多新手觉得指针难,首先是没弄明白它到底是什么。说白了,指针就是个变量,但它存的不是数字、字符这些普通数据,而是另一个变量在内存里的地址。
打个比方,内存就像一排柜子,每个柜子有编号(地址),里面放着东西(数据)。普通变量就像直接告诉你柜子里的东西是啥,而指针呢,是告诉你东西放在哪个编号的柜子里。
那为啥要用指针?直接用普通变量不行吗?有时候还真不行。比如你想在函数里修改外面变量的值,不用指针根本做不到;还有处理大量数据的时候,用指针能省内存,让程序跑得更快。虽然刚开始觉得麻烦,但学会了能解决很多普通变量搞不定的问题。
可能有人会问,地址又是啥样的?在电脑里,地址就像一串数字,比如 0x0012ff7c(不用记这个,知道是个编号就行)。指针存的就是这串数字,通过它就能找到对应的变量。
第二步:学会定义指针,给指针 “指” 个方向
知道了指针是啥,接下来就得学怎么定义它,让它指向一个变量。这步不难,记住格式就行。
定义指针的格式:数据类型 * 指针名;
比如想让指针指向一个整数变量,就写成
int *p;。这里的*不是乘法,是告诉电脑 “这是个指针”。定义完了,还得让它 “指向” 某个变量,这时候要用
&(取地址符)。比如有个变量int a = 10;,想让 p 指向 a,就写p = &a。意思是 “把 a 的地址存到 p 里”。试着写段代码感受下:
c运行
#include int main() {int a = 10; // 普通变量a,值是10int *p; // 定义一个指向整数的指针pp = &a; // 让p指向a,p里存的是a的地址printf("a的值是:%d\n", a);printf("a的地址是:%p\n", &a); // %p用来输出地址printf("p存的地址是:%p\n", p); // p里的地址和a的地址一样return 0;}运行这段代码你会发现,p 存的地址和 a 的地址一模一样,这就说明 p 真的指向 a 了。新手刚开始可能会把
*和&弄混,多写几次就记住了:&是拿地址,*是通过地址找变量(后面会讲)。第三步:用指针操作变量,这才是指针的本事
指针光指向变量还不够,关键是能用它操作变量。这时候就要用到
*(解引用符),通过指针找到它指向的变量,还能改这个变量的值。比如还是上面的例子,想通过 p 改 a 的值,就可以这么写:
c运行
*p = 20; // 意思是“把p指向的变量改成20”printf("现在a的值是:%d\n", a); // 这时候a的值变成20了是不是很神奇?不用直接写
a = 20;,通过指针也能改 a 的值。这在函数里特别有用,比如你写了个函数想改外面的变量,传普通变量进去没用,但传指针进去就行。试试这个函数的例子:
c运行
#include // 用指针修改变量的值void changeValue(int *x) {*x = 100; // 修改指针指向的变量}int main() {int b = 20;printf("修改前b的值:%d\n", b);changeValue(&b); // 传b的地址给函数printf("修改后b的值:%d\n", b); // b变成100了return 0;}如果不用指针,这个函数根本改不了 b 的值。这就是指针的重要性,能让函数 “穿透” 到外面去操作变量。
新手常踩的坑,你可得注意
- 定义了指针却不指向任何变量:比如只写
int *p;就去用*p,这时候 p 里的地址是乱的,程序可能直接崩溃。一定要先让指针指向一个确定的变量。 - 把
*和&弄反:比如想让 p 指向 a,写成p = a;(少了 &),这就错了,p 存的应该是地址不是值。 - 指针类型 mismatch:比如
int *p; float a; p = &a,int 指针不能指向 float 变量,编译器会报错。
兔子哥刚开始学的时候,就因为指针没指向变量,程序崩了好多次,后来才明白,指针必须 “有地方可指” 才行。
其实啊,指针入门最难的是理解 “地址” 这个概念,毕竟平时咱们用变量都是直接用值,突然要跟地址打交道,肯定不习惯。但你只要记住:指针就是存地址的变量,
&是拿地址,*是通过地址找东西,这三个核心点,多写几段代码试试,很快就入门了。不用怕犯错,指针这东西,都是在改错中学会的。今天这 3 步你要是能吃透,后面学数组指针、函数指针也会轻松很多。赶紧打开编译器,照着例子敲一遍,你会发现,指针也没那么难嘛!
标签: 0x0012ff7c 有时候
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~