C 语言最精髓的东西指针
- 为什么会有指针
对于 c 语言的变量还是常量都是在虚拟内存当中的(VM),内存会有相对应的地址。生活中你家有地址也有家庭电话。如果别人不知道你家的地址,别人要通知你干什么事情,就只能给你打电话。但是电话号码是可以换的,电话号码一换别人就找不到你了,这时候别人还要想找到你,你就的提供你家的地址给他他才能找到你。(指针就应运而生)
- 什么时候该用指针
- 函数址传递
- 在栈上开辟新的内存
- 链表的使用
- 什么是二级指针
指针存的是地址,而二级指针里面存的是地址的地址。
- 什么情况下回用到二级指针呢
- 函数要改变传入指针的指向
函数的值传递和址传递都是将传入数据进行了拷贝生成副本,保存的副本供函数内部使用。针对指针传递,那么函数会先弄一个指针(q)指向传入指针(p)指向的内容,这个指针就是传入指针的副本,也就是说从现在开始传入指针(p)已经与我的函数无关了。因为我的函数内部没有传入指针(p)的地址,所以我没办法对传入指针(p)有任何操作。我函数能做的仅仅是改变 p 指向的内容。假如说你在函数内部对 副本(q)进行了赋值是毫无意义的,因为你仅仅只是给副本(q)赋值,而对传入指针(p)没有任何影响。所以在函数内部要想给指针赋值,你就只能传指针的地址,那么就要用到二级指针了。
// 测试代码
#include <stdio.h>
void func(int *q)
{
printf("&q = %d\n", &q);
return;
}
int main(void)
{
int i = 10;
int *p = &i;
printf("&p = %d\n", &p);
func(p);
return 0;
}
- 暂时就这么多了
- 总结
要想学好指针,必须对内存有着较深的理解,熟悉函数的传参过程。了解相应的内存结构。