二重指针与一重指针表达式
char *p; // 一重指针
char **p1; // 二重指针
p = &a; // char a; char * 类型表示指针指向的变量是char类型
p1 = &b; // char *b;char **类型就是指针指向的变量是char *类型
int *c[5]; // 指针数组
int **p2 = c;
二重指针与一重指针有什么相同点与不同点?
1、本质上两者都是指针变量,指针变量也就是变量。
2、一重指针变量和二重指针变量
3、一重指针变量和二重指针变量本身都 占4个字节
4、二重指针其实也是一种数据类型,它指向的变量类型必须是一重指针,编译器在编译时会根据二重指针的数据类型来做静态类型检测。
这里解释下静态类型检测:
以char *p;为例解释。当程序中定义一个char *p;时,就是告诉编译器程序员想用这个p指针是指向char型数据的,在使用的时候如果程序员误将这个变量指向double或者其他类型的变量的时候,可能程序员没有注意到这个错误而这个错误会造成严重的错误。这是编译器会在编译的时候进行静态类型检查,向程序员报这个错误提醒程序员。
二重指针的用法
(1)二重指针指向一重指针的地址
(2)二重指针指向指针数组的
(3)在函数传参时为了通过函数内部改变外部的一个指针变量,会传这个指针变量的地址进去
二重指针与数组指针
1、二重指针、一重指针、数组指针、结构体指针、普通指针的本质都是相同的,都是变量。
2、所有的指针变量本质都是相同的,都是4个字节,都是用来指向别的东西的,不同类型的指针变量只是可以指向变量类型不同
3、二重指针就是指针数组指针(指向指针数组的指针)