指针是C语言的一大特色,其中有很多指针类型,我自己学了一遍,发现过程理解虽然没问题,但是学完发现已经乱的差不多了,在《C语言避坑指南》中加入指针,以梳理学过的知识,巩固所学避免出错,同时希望能帮到大家。
指针变量,即存放其他变量地址的一种变量。
声明方式: 变量类型 *变量名1;
可以用 *指针变量名 取指针变量中存放的地址中的值; 注意在定义指针变量时, * 是表示指针变量的固定写法.
变量类型 **指针变量名; 表示一个二级指针,其使用方式与一级指针类似。
我们通常用二级指针存放(指向)一级指针的地址 一级指针存放(指向)普通变量的地址
下面将展示一些初级用法以帮助各位同学加深理解:
#include<stdio.h>
int main(){
int a;
int *p1;
int **p2;
a = 10;
p1 = &a;
p2 = &p1;
printf("变量a的地址: 0x%p\n", &a); // 变量a的地址: 0x000000000061FE1C
printf("一级指针p1的地址: 0x%p\n", &p1); // 一级指针p1的地址: 0x000000000061FE10
printf("二级指针p2的指针: 0x%p\n", &p2); // 二级指针p2取值: 0x000000000061FE1C
// 二级指针指向一级指针地址,一级指针地址中存放了变量a的地址
printf("二级指针p2取值: 0x%p\n", *p2); // 二级指针p2取值: 0x000000000061FE1C
// 一级指针指向普通变量地址,及a的地址,取变量a地址的值,即为10
printf("一级指针p1取值: %d\n", *p1); // 一级指针p1取值: 10
// 从右到左运算,先拿到p1中的变量a的地址,再通过变量a的地址拿到变量a的值
printf("二级指针p2取两次值: %d\n", **p2); // 二级指针p2取两次值: 10
return 0;
}
下面附一张图展示原理: