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

简介: 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) 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;


小结


  • 不提倡使用多级指针,一般使用多级指针的情况都可以通过其他方式来实现,本文仅简单探讨一下其实现方案。
相关文章
|
4天前
|
编译器 C语言
【C语言初阶】指针篇—下
【C语言初阶】指针篇—下
|
4天前
|
存储 C语言
【C语言初阶】指针篇—上
【C语言初阶】指针篇—上
java.lang.NullPointerExceptionMybatisPlus出现,测试,java.lang.NullPointe,空指针异常,public方法少写了一个字段,没加注解
java.lang.NullPointerExceptionMybatisPlus出现,测试,java.lang.NullPointe,空指针异常,public方法少写了一个字段,没加注解
|
14天前
|
搜索推荐 程序员 C语言
指针赋值与引用传递:C语言的基础知识与实践技巧
指针赋值与引用传递:C语言的基础知识与实践技巧
|
13天前
|
搜索推荐 程序员 C语言
指针赋值与引用传递:C语言的基础知识与实践技巧
指针赋值与引用传递:C语言的基础知识与实践技巧
|
2天前
|
C语言
C语言5 字符输出函数和格式输出函数
C语言5 字符输出函数和格式输出函数
6 1
|
4天前
|
算法 编译器 C语言
深入浅出C语言—【函数】下
深入浅出C语言—【函数】下
|
15天前
|
Java C语言 C++
定义C语言的int main()函数
定义C语言的int main()函数
|
17天前
|
存储 移动开发 C语言
技术心得记录:嵌入式开发中常用到的C语言库函数
技术心得记录:嵌入式开发中常用到的C语言库函数
11 1