1、什么是指针?
指针是一个变量,指针变量简称指针,其值是地址,即变量在内存中的位置。指针就是用来保存某个变量在内存中的位置。指针就是一个地址
如何理解地址?
每个变量声明后,在内存中都会有一个位置,就相当于在内存中的编号,这个编号就像是每个人的家庭住址,这个编号是一个十六进制数,这个数就是地址。
2、指针的声明
一级指针
数据类型 * 指针名;
如:
int* a; //a是指针变量名,a才表示的一个地址,而不是*a
float *b;
char *c;
void *d; //泛型指针,指针的固定都是8字节
void e; //不允许,因为void没有大小,
【我的理解】:c语言每个变量存在都是有地址的,如果说没有地址就不能存在,例如void e; 是不能存在的
二级指针
数据类型 ** 指针名;
如:int **a;
二级指针是用来存放一级指针的地址。
【我的理解】:就是地址的地址
3、指针的初始化
①指向一个变量的地址
int a = 10;
int *p = &a; //p === &a 这里p就是地址,如何给才常数a取地址
②指向NULL
int *p = NULL; //NULL就是(void *)0
int *p = 0x12345678; //不能给指针直接赋值一个地址
③指向一个指针
int a = 10;
int *p = &a;
int *q = p; //将一个指针的值赋值给另一个指针
二级指针初始化:
int *p = &a;
int **q = &p;
4、指针的使用
int a = 10;
int p = &a; //此处的“”表示p是一个指针变量
p = 20; //此处的“”表示对指针p进行解引用(取地址中的内容) *p就相当于是一个常数
printf(“%p”,p) //%pj就是打印地址
int **q = &p;
**q = 30;
5、指针的运算
++ – + -
q-p两个指针只能相减,不能加乘除
单独使用
// * :是解引用
// & :赋地址
//*&:可以抵消(有些情况不能)
只能指针才能解引用