指针
- 本质
- 星号的用法
- 传递时的用法
本质
- 就是个“门牌号”
- 把计算机内存想象成一个巨大的小区,里面有一排排一模一样的房子,你在代码里写个
int a = 10;,就相当于在这个小区里租了个房子,往里面塞了个写着“10”的纸条。
那指针是啥?指针就是这套房子的门牌号
inta=10;int*p=&a;&a 就是去查一下 a 这个房子的门牌号是多少,然后把这个门牌号塞进 p 这个盒子里。p 里面装的压根不是 10,而是“XX路100号”这种地址
星号的用法
- 当你写 int *p 的时候:它就是个标签。相当于你跟编译器说,p 这个盒子比较特殊,它不装普通数字,它专门用来装门牌号
- 当你写 *p 的时候:它就是个钥匙。意思是“拿着这个门牌号找过去,开门,把里面的东西拿出来”。就这么简单。你以后看到 *p,脑子里就自动翻译成“开门拿东西”就行了。很多人刚学的时候想改个值,顺手写
p = 20;,这就相当于把门牌号撕了换成20,原来的房子根本没动!要改里面的值,必须得*p = 20;,拿钥匙开门去改
传递时的用法
- 问题:想改原件,得给门牌号:你在函数里写个
void change(int x),然后在里面把 x 改成100,结果出了函数一看,外面的变量还是原来的值 - 解决方案:C语言默认是“复印一份给你”。你拿着复印件怎么涂改,原件都不会变。你想改原件怎么办?你得把原件的门牌号传进去
voidchange(int*x){*x=100;// 拿着门牌号找到原件,开门,改掉!}