目录
指针的优点:
- 使程序更加简洁、紧凑、高效
- 有效的表达更复杂的数据结构
- 动态分配内存
- 得到多余一个数的函数的返回值
1.概念
地址:内存中每个字节单元都有点编号
指针:指针就是地址
指针变量:用于存放地址的变量叫做指针变量
2.格式
存储类型 数据类型 * 指针变量名
int* p;
使用:
int a=5;
int* p=&a;
char ch=‘t’;
char* p=&ch;
3.指针操作符
&:取地址符--->取变量的地址
*:取内容 --->取地址里面的内容
*&a==a;// *和&是互逆运算
// a是变量就是错的,a是地址就是对的
&*a
4.初始化
指针变量只使用前不仅要定义还要初始化,未初始化的指针变量是不能随便使用的,会产生野指针
int* p;
1. 将普通变量的地址赋值给指针变量
int a=10;
1)int* p=&a;//定义的同时赋值
2)int* p=NULL;//先定义指针变量在进行赋值
p=&a;
int* p = NULL; // int *p
p = &a;
printf("%d %d\n", a, *p); // 打印 a 的值 10 10
printf("%p %p\n", &a, p); // 打印 a 的地址
*p = 3;
printf("%d %d\n", a, *p); // 打印 a 的值 3 3
printf("%p %p\n", &a, p); // 打印 a 的地址
a. 将数组的首地址赋值给指针变量
char str[10] = "hello";
char* p = str; // 指针指向数组的首地址,指向字符'h'的地址
b. 将指针变量里面保存的地址赋值给另一个指针变量
floatf = 1.3;
float* p = &f;
float* q = p;
5.指针运算
5.1算术运算
char str[32] = "hello";
char* p = str;
p++; // 指针向高地址方向移动一个数据单位(看数据类型),指针指向发生变化
p--; // 指针向低地址方向移动一个数据单位(看数据类型),指针指向发生变化
int* p; p++;// 移动4字节
double*p; p++; // 移动8字节