1.指针变量的定义:类型说明符 *变量名;例如:int *p = &a(*号是标识符,表示我们定义了一个指针变量p,里面存放了int类型a的地址);
指针就是地址,地址就是指针;
2.*的作用:1)标识符,用在定义指针的时候,表示我定义了一个指针变量 int *p;
2)取值运算符,取了指针所指向的空间里面的内容;
3)乘号;
int a=10; int *p = &a;可以得出p=&a(改变p的指向);*p=a(间接改变a的值);
3.指针的数据类型大小在32OS永远是4个字节,64os为8个字节,
不会因为指向的数据类型而发生改变。
Int * char * double * float * 都是四个字节。
4.const
Const int *p :const 修饰了*P,所以*p不能被改变,但是和p没关系,p还可以改变指向
Int const *p:const 修饰了*P,所以*p不能被改变,但是和p没关系,p还可以改变指向
Int * const p:const 修饰了P,所以p不能被改变,但是和*p没关系,*p还可以改变
Const int const *p:const修饰了*P,所以*p不能被改变,但是和p没关系,p还可以改变指向
Int const * const p:p和*p都不能被改变。
const 在*的那个地方,如果在*的左边,*p不能被改变,如果在*的右边 p不能被改变
5.指针和一维数组
6.指针的运算 一维整型数组和指针
Int arr[5] = {1,2,3,4,5};
Int *p = arr;int *p = &arr[0]
7.指针数组和数组指针
指针数组:int(*p)[5] 是一个指针,指向一个数组;
数组指针:int *p[5] 是一个数组,里面放的是指针;
8.数组指针的运算
p+1:往地址增大的方向移动一个数组类型,p的指向没有改变
p-1:往地址减小的方向移动一个数组类型,p不改变
p++:增大的方向移动一个数据类型,p的指向已经改变
p--:减小的方向移动一格数据类型,p改变
9.malloc和free
Malloc和 free
#include <stdlib.h>
void *malloc(size_t size)
作用:在堆区申请一片空间
返回值:成功返回申请空间的首地址,失败返回NULL
参数:想要申请多大的空间用sizeof计算
Void *是空指针,空指针是存在的,但是void类型的变量是不存在的。空指针也叫万能指针。
void free(void *ptr)
作用:释放申请到的空间
参数:申请空间的首地址
#include <string.h>
void *memset(void *s, int c, size_t n)
作用:清空申请到的空间
参数1:申请到空间的首地址
参数2:用什么数据去清空
参数3:清空多大的空间
例如:手动申请一个动态数组