一. 指针概念
要想知道指针的基本概念,就要先知道变量在内存中是如何存储的。在存储时,内存会被分为一个个的内存单元,就好比酒店的房间一样。但是如果没有门牌号码,就很难去找到一个指定的房间,效率很低。所以要给每个房间编上门牌号。在计算机中,这种门牌号我们就能暂且理解为指针。
1.指针变量和地址
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 10;
return 0;
}
变量创建的本质其实是在内存中申请空间。例如首先我们创建了整型变量a,在内存中就申请了4个字节,其中每个字节都有自己的地址。
这里就是a在其中的地址。内存中申请了四个字节来存放10,每个字节都有自己的地址。
之后如果我们要获取a的地址,我们就得使用取地址操作符&。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 10;
&a;
printf(“%p\n”,&a);
return 0;
}
这样就能获取到a的具体地址。
2.指针的解引用
我们将地址获取之后,为的是要进行后续的使用。
我们拿到了地址后,就可以通过地址去找到指针所指向的对象。所以我们会用到解引用操作符 *。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 10;
int* pa = &a;
*pa = 0;
return 0;
}
这里的int说明的是pa是一个指针变量,int是说指向的对象是整型变量。
后面pa的操作就是通过pa中存放的a的地址来找到指向的对象,这样就就通过这个操作符将a改为了0
3.指针变量的大小
32位平台下地址是32个bit位,指针变量⼤⼩是4个字节
•64位平台下地址是64个bit位,指针变量⼤⼩是8个字节
•注意指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,⼤⼩都是相同的。
4.void*指针
指针类型中有⼀种特殊的类型是 void * 类型的,可以理解为⽆具体类型的指针(或者叫泛型指
针),这种类型的指针可以⽤来接受任意类型地址。但是也有局限性, void* 类型的指针不能直接进
⾏指针的±整数和解引⽤的运算。
可以看到,void*类型的指针可以接收不同类型的地址,但是不能直接进行指针运算。
那么void类型的指针到底有什么⽤呢?
⼀般 void 类型的指针是使⽤在函数参数的部分,⽤来接收不同类型数据的地址,这样的设计可以
实现泛型编程的效果。使得⼀个函数来处理多种类型的数据。