在学数据结构链表的初始化时碰到了二级指针,一开始十分陌生这种用法不知其意思,经过初步学习了解了其大意。
一级指针与二级指针的意义
一级指针
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 }
二级指针
当需要改变的是指针的值时,(一定要分清是指针的指向,还是指针指向的东西)
例:在数据结构的链表的初始化中,传入二级指针的原因是并不是改变主函数中指针指向者的内容,创建新节点的本质其实是改变指针指向,即改变指针自己本身。因此如果传入的是一级指针,只能改变指针指向的内容。