指针
什么是指针?
指针其实是内存单元地址
什么是指针变量
指针变量是用于存储内存单元地址的变量
指针变量存储的实质
顾名思义,指针变量存储的是内存单元的值,即存储的值其实指向的一个特定类型内存区域的起始地址。
如下例子,整型变量a的值为123,其内存单元地址为0x104,指针变量存储的值是变量a的内存单元0x104。
指针变量指向了内存地址起始为0x104,长度为4个字节的内存单元。p也可以对这个4个单元进行操作。
int a = 123;
int *p = &a;
指针变量的运算
c语言中,我们可以像普通整型数据一样,对指针变量进行运算。
指针变量的转换
普通类型的指针变量都可以直接赋值void *空类型指针,
但空类型指针需要强转才可以转成普通类型指针。
void 指针是一种特殊的指针,表示“无类型的指针”,因为其没有指定类型,所有它可以指向任何类型的数据,也就是说任何类型的指针可以直接复制给void指针。
void * vp;
int * ip;
...
vp = ip;
但是void指针赋值给其他类型的指针时,必须强制转换
void *vp;
int * ip;
...
ip = (void *)vp;
这是因为指定了类型的指针变量指向了内存的一块区域,但空类型指针无法确定指向内存区域的大小。
需要注意的是,不同类型指针变量相互转换时,需避免访问非法的内存区域,导致程序异常退出。
如下例子,chP指向了一段长度为1字节的变量a的内存区域,当其强制转换成int指针时,则超出了编译器分配的内存区域,程序会异常退出。
char a = 'a';
char * chP = &a;
int * iP = (int *)chP;
*iP = 123;
指针变量的算术运算
指针变量可以使用算术运算符实现自增减,如下例
int a =