(二)指针和二级指针

C 语言最精髓的东西指针

  • 为什么会有指针

        对于 c 语言的变量还是常量都是在虚拟内存当中的(VM),内存会有相对应的地址。生活中你家有地址也有家庭电话。如果别人不知道你家的地址,别人要通知你干什么事情,就只能给你打电话。但是电话号码是可以换的,电话号码一换别人就找不到你了,这时候别人还要想找到你,你就的提供你家的地址给他他才能找到你。(指针就应运而生)

 

  • 什么时候该用指针
  1. 函数址传递
  2. 在栈上开辟新的内存
  3. 链表的使用

 

  • 什么是二级指针

指针存的是地址,而二级指针里面存的是地址的地址。

 

  • 什么情况下回用到二级指针呢
  1. 函数要改变传入指针的指向

     函数的值传递和址传递都是将传入数据进行了拷贝生成副本,保存的副本供函数内部使用。针对指针传递,那么函数会先弄一个指针(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;

 }

 

  1. 暂时就这么多了

 

  • 总结

     要想学好指针,必须对内存有着较深的理解,熟悉函数的传参过程。了解相应的内存结构。

猜你喜欢

转载自blog.csdn.net/qq_41985711/article/details/82943536
今日推荐