- 一级指针:
- 内存中每个字节都有一个编号,这个编号就是指针,也称作地址;
- 专门用来存储地址的变量,就是指针变量;
- 定义一级指针变量并初始化:
数据类型 *指针变量名 = &普通变量名;
数据类型 *指针变量名 = 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