一. 什么是内存
内存是一个临时存储器。当一个程序运行时,程序代码和参数变量会暂时先存放到内存中,然后由CPU来读取,接着再执行。如果电脑关机后,里面的数据也会清空。
二. 变量
一个数值可以变化的量。
例如 char, int, float, double
三. 地址与首地址
地址就是变量在内存中所占据的位置。
首地址则是第一个就是变量在内存中所占据的位置。
四. 指针
指针=首地址
五. 指针变量
关于首地址的变量
通常在变量后面加*代表
例如:int* (变量名)
六. 指针大小
指针大小是根据操作系统的位决定。假设电脑是32位的,那么指针大小就是4字节。如果64位,指针大小则是8字节。
七. 解引用
解引用就是返回内存地址中对应的内容。
在变量名前面加个*就能使用解引用功能。
int x=100;
int*p=&x; //*p指向x
printf("%p",p); //答案是x的地址
printf("%d",*p); //答案是x的内容100
八. 野指针
一个没有对象的指针。
例子:int* p;
九. 空指针
内容为NULL的指针。
例子:int*=NULL;
十. 万能指针
任何变量都能用的指针。总所周知指针的变量必须和所指定的对象同一个变量,不然则是会生成失败。
例子: int x=100;
int* p=&x; //这个是有效输出,因为变量和指定对象的变量一样
char* p1=&x; //这个则是无效输出,因为变量和指定对象的变量不一样
但是有个例外那就是void*,它可以作为任何指定对象的变量的指针。
int* p2=&x; //这是成立的输出
十一. 多级指针
使用多过一个指针指向一个对象。
int x=100;
int*p =&x; //*p指向了x
int**p1=&p //**p1 指向了*p,然后*p再指向了x
从以上代码中我们可以得知有两个指针指向了x。这就是多级指针。