C语言的多级指针的上限及实现方法

发布于:2022-11-08 ⋅ 阅读:(847) ⋅ 点赞:(0)
  • 🐚作者简介:花神庙码农(专注于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;

小结

  • 不提倡使用多级指针,一般使用多级指针的情况都可以通过其他方式来实现,本文仅简单探讨一下其实现方案。

如本文对你有些许帮助,欢迎大佬支持我一下,您的支持是我持续创作的不竭动力
支持我的方式


网站公告

今日签到

点亮在社区的每一天
去签到