指针变量初始化
如果指针变量没有初始化,此时是随机值。 ---野指针
初始化可以让指针变量 有明确指向。
int a = 10;
int *p = &a;
int *p = NULL; //NULL 0号地址 --- 空指针
赋值:
int * p;
p = NULL;
int a;
int *p;
p = &a;
int *p,q; //p是指针类型 int *
//q是int型
int *p,*q; //此时表示定义了两个 int*类型的变量 p 和q
注意:
定义时候的 * 修饰变量名的 表示定义的是一个指针类型的变量
为啥需要指针?
被调修改主调 //指针 80% 用途
要实现被调修改主调:
1. 指针作为函数参数
形参 -- 指针类型 变量 ,用来接收实参 (实参是要操作的内存空间的地址)
实参 -- 要修改谁,就把谁的地址传过去
//要保证 空间有效
注意: 被调函数中 一定要有 *p 运算 //(间接访问的操作)
值传递 //只是 实参数据 赋值了形参
地址(指针)传递 //传的是地址 --可以实现被调修改主调
指针 + 一维整型数组
int a[5]; //一维整型数组
//数组名
// 类型 --- 数据类型 int[5]
// 值 --- 数组首元素的地址 --- 常量
//数组名是个常量,不能做自增自减运算
数组名 -- 数组首元素的地址
这个地址值的类型
a <=> &a[0]
//a[0]的数据类型 -- int型
//&a[0] 地址的类型 -- int *
int *p = a; //表示 p指向数组a
*p <=> a[0]
指针的运算:
&
*
p+1 //加n 表示 跳过了n个基类型
p-1
p++
p--
指针比较 > >= < <= == !=
p - q //表示差了多少元素(基类型)
//必须是同一类型的指针
p + q //不行
数组作为函数参数
形参 -- 数组形式 //本质上是一个指针类型变量
int *a
数组长度
int len
实参 -- 数组名
数组名代表数组首地址
数组长度