- 🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)
- 🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd
- 🌐系列专栏:C语言编程
- 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!! 👉关注✨、点赞👍、收藏📂、评论。
- 如需转载请参考转载须知!!
基础指针用法
- 众所周知,下面的一级和二级指针,是C语言里最经典的指针应用。
int *p = &a; //一级指针
int **q = &p; //二级指针
指针级数最多有多少
- C语言规范
规范本身并没有规定指针的级数,C语言语法ISO/IEC 9899:2018定义如下:
type-qualifier:
const
restrict
volatile
type-qualifier-list:
type-qualifier
type-qualifier-list type-qualifier
pointer:
* type-qualifier-list(opt)
* type-qualifier-list(opt) pointer
从该词法定义上看, pointer是一个递归定义,没有限定 pointer 有多少级的。
编译器角度
实际上的限制可能会取决于*,在当前编译器里能处理的栈的大小。因为在编译阶段,要把这个int ****** p这一类的东西做词法处理,******这个长度就可能会遇到当前处理栈的大小的问题。所以它的处理大小是取决于栈的大小的。内存角度
指针级数过多,涉及大量的变量,可能会占用更多的内存,有可能会有内存的限制。
如何实现多级指针
- 这里仅以1000级指针为例来说明。
利用递归的宏来实现
- 下面这种方法,仅适用于级别为NNN(如8、64等)的情况:
#define P(x)1 x x x x x x x x x x
int P(P(P(*))) p = NULL;
利用宏的堆叠来实现
- 这种方法,可根据需要实现不同级别的组合:
#define POINTER1 *
#define POINTER5 POINTER1 POINTER1 POINTER1 POINTER1 POINTER1
#define POINTER10 POINTER5 POINTER5
#define POINTER50 POINTER10 POINTER10 POINTER10 POINTER10 POINTER10
#define POINTER100 POINTER50 POINTER50
#define POINTER500 POINTER100 POINTER100 POINTER100 POINTER100 POINTER100
#define POINTER1000 POINTER500 POINTER500
int POINTER1000 p =NULL;
小结
- 不提倡使用多级指针,一般使用多级指针的情况都可以通过其他方式来实现,本文仅简单探讨一下其实现方案。
如本文对你有些许帮助,欢迎大佬支持我一下,您的支持是我持续创作的不竭动力
支持我的方式