标签:存储 变量 数据类型 内存空间 C语言 地址 类型 指针
指针
在内存中定义变量(申请内存空间)存储数据,但是每个存储数据变量都有地址,地址也能找到内存空间,通过地址也可以操作到内存空间的值
指针:存储地址的变量,就叫做指针,也叫做指针变量
指针也会占用内存空间,但是指针占用内存空间,空间中存储的是地址值
指针就是操作内存地址,使用内存地址
定义指针变量:
指针变量:本质上是一个变量,存储内存地址
格式:
指向数据类型*变量名;
指向数据类型:指针变量存储哪种数据类型的地址;指向哪种数据类型
*:指针变量
指针变量的类型:指向数据类型*
&变量名:变量的地址
&:取地址运算符
注意:如果指针变量存储某个内存地址,则只有这个地址的内存空间被申请之后,才能通过地址进行访问空间
int a;
int * p = &a;
使用指针变量:
指针变量存储:
指针变量 = 地址(内存空间能够使用的地址)
指针变量访问内存空间数据:
指针访问变量:
* 指针变量名
访问指针变量存储的地址对应的内存空间中的数据
int *p;
p = &a;
*p;//访问a中的数据值,使用变量名就是使用变量的值,所以 *p 不是访问p这个指针变量的值,而是p这个指针变量值为地址,访问对应内存地址中的内存空间的值
指针变量 赋值地址:通过地址,建立指针与内存空间的联系
指针变量使用间接取值符( * ):得到对应空间的数据
对变量取地址时,如果变量有多个字节,则&a,表示取的首地址,地址最小的那个字节地址
野指针:
指针记录(存储)的地址不明确,或非法的内存地址不具有使用操作权限
注意:野指针不要 直接 取 * 操作
int * p;//野指针
空指针:
指针记录的是0x0000 地址,使用 宏 NULL 表示
#define NULL(void *)0x00
系统规定 NULL 地址 不允许访问操作,只要操作就会报错
通常 使用 NULL 表示 该指针变量,现在不可用
int * p = NULL;//空指针
万能指针:
void:表示空类型,不能直接定义变量,因为定义变量也不知道其变量的大小
void * 类型指针变量 表示一个万能指针,可以存储其他任意类型的地址,也可以把void * 类型指针赋值给其他任意类型的指针
void * 类型指针,不能进行除了赋值运算的其他任何指针操作
int * a = &x;
void * b;
b = a;
double * c;
c = b;
2、指针的运算
指针变量的存储大小:
指针运算:
指针的算数运算:+、- 算数运算
表示指针向前或向后移动地址(移动指针存储的地址)
指针 + 整数n:
地址向增大方向 移动 n个 指向数据类型大小
指针 - 整数n:
地址向减小方向 移动 n 个 指向数据类型大小
指针没有 * 、 / 、% 运算
注意:指针进行算数运算后,类型还是原指向类型
指针++、++指针、指针--、--指针
标签:存储,
变量,
数据类型,
内存空间,
C语言,
地址,
类型,
指针
From: https://www.cnblogs.com/tangxiyue/p/17917169.html