C语言(关于二级指针)

在学数据结构链表的初始化时碰到了二级指针,一开始十分陌生这种用法不知其意思,经过初步学习了解了其大意。

一级指针与二级指针的意义

一级指针

int x = 1;

int *a       //定义了一个指向int 型变量的指针a;

  a = &x;

  

1.a即指 x 的地址 

2.*a其实就是a指向的内容, ,*a即为X,可以做左值也可以做右值,对其操作都等同于对X操作

二级指针

int x= 1;

int *a;

int **b;

b=&a;

1.b是指针a的地址,b是指向指针a的指针;

2.*b代表指针a,  如果令: int c = 5; *b = &c;   相当于将指针a指向了c;

3.**b代表了指针a指向的int型变量x,   如果令:**b = 2; 相当于将 x = 2;

为什么存在二级指针?何时使用

一级指针

当需要改变的是指针指向的值时

例:当用变量作为参数传给函数,而函数需要改变该变量时

 1 #include <stdio.h>
 2 void swap(int *a,int *b)
 3 {
 4     int c;
 5     c = *a;
 6     *a = *b;
 7     *b = c;
 8 }
 9 int main ()
10 {
11     int a = 2;
12     int b = 3;
13     printf("initial
 a = %d, b = %d
",a,b);
14     swap(&a,&b);
15     printf("after swap
 a = %d , b = %d
",a,b);
16     return 0;
17 }
View Code

二级指针

当需要改变的是指针的值时,(一定要分清是指针的指向,还是指针指向的东西)

例:在数据结构的链表的初始化中,传入二级指针的原因是并不是改变主函数中指针指向者的内容,创建新节点的本质其实是改变指针指向,即改变指针自己本身。因此如果传入的是一级指针,只能改变指针指向的内容。

原文地址:https://www.cnblogs.com/Ponytai1/p/5874778.html