指针究竟是什么是地址还是类型
指针(pointer)和 int,char 类似,是一种独立的数据类型。区别在于,当我们说“指针”时,其实是说一系列的数据类型(泛指),就像我们说“数值型数据类型”,也是泛指(包括 int, float, double 等等)。
![](https://cdn-kb.worktile.com/kb/wp-content/uploads/2023/04/2023041503374333.jpg)
一、指针是地址吗
不是。指针(pointer)和 int,char 类似,是一种独立的数据类型。区别在于,当我们说“指针”时,其实是说一系列的数据类型(泛指),就像我们说“数值型数据类型”,也是泛指(包括 int, float, double 等等)。当我们具体说 “int 型指针”时,我们是说 int*(而不是 float* 或者 double*),就像是指出了数值类型中的某一个具体类型(例如 int)。下面以 int *a = &b; 为例,并假设这行代码的运行环境下,int 为 4 字节长。
指针本身具有独立的数据类型,我们可以用这个类型声明一个变量并赋值,只不过指针所对应的变量用途比较特殊,是用来保存某个内存地址的。也就是说,指针本身占用了一小块内存空间(它本身不是地址,地址就是一串数字,完全不搭边儿),而这块内存空间是用来写入一个地址数据的。
延伸阅读
一、指针有哪些应用场景
指针的应用场景包括但不限于:
1、动态内存分配
指针可以用于动态内存分配,例如在 C 和 C++ 中使用 malloc() 和 free() 函数。
2、数组和字符串
指针可以用于数组和字符串的访问,例如在 C 和 C++ 中使用 char* 类型的指针来访问字符串。
3、函数参数和返回值
指针可以用于函数参数和返回值,例如在 C 和 C++ 中使用指针来传递数组或结构体。
4、数据结构
指针可以用于数据结构,例如链表、树和图等。
5、操作系统
指针可以用于操作系统编程,例如在 Linux 中使用指针来操作文件和网络套接字。
二、指针的优缺点
指针的优点包括:
1、内存管理
指针可以用于动态内存分配和释放,可以更好地管理内存。
2、数据结构
指针可以用于数据结构,例如链表、树和图等。
3、函数参数和返回值
指针可以用于函数参数和返回值,可以更好地处理大型数据结构。
4、操作系统
指针可以用于操作系统编程,例如在 Linux 中使用指针来操作文件和网络套接字。
指针的缺点包括:
1、内存安全
指针可能会导致内存安全问题,例如空指针、野指针、缓冲区溢出等。
2、数据竞争
指针可能会导致数据竞争问题,例如多个线程同时访问同一个内存地址。
3、难以调试
指针可能会导致程序难以调试,例如使用野指针可能会导致程序崩溃或不可预测的行为。