- 一级指针:
- 内存中每个字节都有一个编号,这个编号就是指针,也称作地址;
- 专门用来存储地址的变量,就是指针变量;
- 定义一级指针变量并初始化:
数据类型 *指针变量名 = &普通变量名;
数据类型 *指针变量名 = NULL;
-  指针变量名:表示指针变量中存储的地址; 
-  &指针变量名:表示指针变量本身的地址; 
-  *指针变量名:表示指针变量指向的地址中的数据; 
-  二级指针: 
-  用来存储一级指针变量的地址; 
-  占用内存空间的大小: 
-  32位OS:4B; 
-  64位OS:8B; 
-  定义二级指针变量并初始化: 
数据类型 **二级指针变量名 = &一级指针变量名;
数据类型 **二级指针变量名 = NULL;
- 二级指针的用途:
int a = 20;
int *p = &a;
int **q = &p;
**q <==> *p <==> a
*q <==> p <==> &a
- 整型变量&一级指针&二级指针的关系如图所示:

- 测试代码:
#include<stdio.h>
int main(int argc, const char *argv[])
{
    int a = 20;
	int *p = &a;
	int **q = &p;
	printf("int * size = %ld\n",sizeof(int *));
	printf("int ** size = %ld\n",sizeof(int **));
	printf("**q = %d\n",**q);
	printf("*p = %d\n",*p);
	printf("a = %d\n",a);
	printf("*q = %p\n",*q);
	printf("p = %p\n",p);
	printf("&a = %p\n",&a);
	printf("q = %p\n",q);
	printf("&p = %p\n",&p);
	return 0;
}
- 运行结果:
int * size = 8
int ** size = 8
**q = 20
*p = 20
a = 20
*q = 0x7ffdbce87bd4
p = 0x7ffdbce87bd4
&a = 0x7ffdbce87bd4
q = 0x7ffdbce87bd8
&p = 0x7ffdbce87bd8



















