一、内存和地址
1.内存
内存是计算机上的存储空间,程序是运行在内存中的,程序使用的空间,也是来自内存。
每个内存单元都有一个编号,也就是地址,C语言中给地址起了一个新的名字:指针。
内存单元的编号 = 地址 = 指针
在C语言中,创建变量其实就是向内存申请空间
2.取地址操作符&
3.解引用操作符 *
解引用操作符也叫间接访问操作符
4.指针变量的大小
指针变量的大小和类型无关,在相同的平台下,大小都是相同的
在32位平台下地址是32个比特位,指针变量的大小是4个字节
在64位平台下地址是64个比特位,指针变量的大小是8个字节
指针类型决定了指针在解引用的时候一次访问了几个字节
int*的指针解引用的时候一次访问4个字节
char*的指针解引用的时候一次访问1个字节
double*的指针解引用的时候一次访问8个字节
pa的类型是int* ,pa认为自己指向的是int类型的数据,pa+1就应该是跳过1个int整型的数据,也就是4个字节
pc的类型是char* ,pc认为自己指向的是char类型的数据,pc+1就应该是跳过1个char类型的数据,也就是1个字节
(了解,后面会详细讲)void*指针
在指针类型中有一种特殊类型是 void * 类型的,可以理解为无具体类型的指针(也叫泛型指针),这种类型的指针可以用来接受任意类型地址
但是也有局限性,void* 类型的指针不能直接进行指针的+-整数和解引用的运算
一般 void*类型的指针是使用在函数参数的部分,用来接收不同类型数据的地址,这样的设计可以实现泛型编程的效果,使得一个函数来处理多种类型的数据
二、指针运算
1.指针+-整数
2.指针-指针
指针-指针得到的是两个指针之间元素的个数
tip:
指针-指针的时候,两个指针要指向同一块空间。