一、认识指针
地址:内存中每一个字节都有一个数字编号,这个编号就是地址。
指针:指针是存储地址的变量
指针在64位系统下是占8个字节,32位系统下是占4个字节。
二、如何定义指针
数据类型 * 变量名;
数据类型:指指针指向变量的数据类型
变量名:就是指针
1.如何给指针赋值
1》初始化
如:int a=4;
int * p =&a;
2》赋值
如:int a=4;
int * p;
p=&a;
//当指针存储了变量a的第一字节的地址,就是指针p指向了变量a
三、什么是*p
对p取:找到p的值,取p个字节,形成一个空间,这个空间就是变量a。
所以p就是a,通过p修改变量a的值和通过a修改变量的值是一样的。
四、指针的作用
通过函数交换a也b中的值
指针在访问不在当前栈(不同函数)内的数据时使用。
一般情况:C语言中用指针的地方在形参,用于接收所传的变量或一维数据。 int * p
如果传变量,则传变量的地址 ,&变量名
如果传数组,则传数组名(数组名即指第一个元素的地址),数组名
五、野指针、泛指针
只定义没赋值的指针叫空指针(野指针),野指针会出现不可预知的错误,为了避免这种错误,将没有赋值的指针,暂赋值为NULL
泛指针:void * 变量名;
可接收任何类型的地址,也可接收任何其它指针。
六、指针和数组的关系
数组源于指针
数组名是数组的首元素第一个字节的地址
当将数组名传递给一个指针时,有两种访问方式:1.以数组形式操作(将指针当成数组使用)2.以指针操作(对指针取*的操作)
区别:
指针是变量;
数组名,首元素地址常量;
七、const:只读属性
前const:修饰P:不可以通过*p改变变量中的值,可以修改p的指向
后const:修饰p:不可以修改p的指向,可以通过p改变变量中的值。