指针初识
一. 一级指针
什么是指针呢?其实指针就是一个存放内存地址的变量,通常理解为“指向某个空间”,而一级指针,顾名思义是存放一个已知空间(已知量)的地址的变量
例如:
int a = 10;
int* p = &a;
printf("%d", *p);
这里,p是一个一级指针,其中存放的就是已知变量a的地址,当我们用“*”号去解引用它时,编译器则会在p的地址中解引用当前地址存放的值。相当于一个一维数组。但本质不是一维数组
二. 二级指针
一个存放指针的一级指针,即在一级指针的地址中存放的是另一个值的地址,我们就叫它二级指针
例如:
int a = 10;
int *p1 = &a;
int **p2 = &p1;
三. 指针和数组
指针和数组的用法基本相同,但本质不同:
1. 存储方式不同,数组是按顺序存储,并且内存的大小由定义的变量类型决定,而指针的存储不一定连续且都是4字节的空间存储.
2. 赋值方式不同,数组可以给定空间大小后不进行初始化,但是指针必须初始化或使用动态开辟内存
3. 数组是数组,指针式指针,各有优缺点,但本质不相同
四. 指针数组
顾名思义,一个存放指针类型变量的数组
例如:
int* arr1[10]; //整形指针的数组
char *arr2[4]; //一级字符指针的数组
char **arr3[5];//二级字符指针的数组