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;


小结


  • 不提倡使用多级指针,一般使用多级指针的情况都可以通过其他方式来实现,本文仅简单探讨一下其实现方案。
相关文章
|
15天前
|
C语言
【c语言】指针就该这么学(1)
本文详细介绍了C语言中的指针概念及其基本操作。首先通过生活中的例子解释了指针的概念,即内存地址。接着,文章逐步讲解了指针变量的定义、取地址操作符`&`、解引用操作符`*`、指针变量的大小以及不同类型的指针变量的意义。此外,还介绍了`const`修饰符在指针中的应用,指针的运算(包括指针加减整数、指针相减和指针的大小比较),以及野指针的概念和如何规避野指针。最后,通过具体的代码示例帮助读者更好地理解和掌握指针的使用方法。
41 0
|
14天前
|
C语言
【c语言】指针就该这么学(3)
本文介绍了C语言中的函数指针、typedef关键字及函数指针数组的概念与应用。首先讲解了函数指针的创建与使用,接着通过typedef简化复杂类型定义,最后探讨了函数指针数组及其在转移表中的应用,通过实例展示了如何利用这些特性实现更简洁高效的代码。
11 2
|
15天前
|
C语言
如何避免 C 语言中的野指针问题?
在C语言中,野指针是指向未知内存地址的指针,可能引发程序崩溃或数据损坏。避免野指针的方法包括:初始化指针为NULL、使用完毕后将指针置为NULL、检查指针是否为空以及合理管理动态分配的内存。
|
15天前
|
C语言
C语言:哪些情况下会出现野指针
C语言中,野指针是指指向未知地址的指针,通常由以下情况产生:1) 指针被声明但未初始化;2) 指针指向的内存已被释放或重新分配;3) 指针指向局部变量,而该变量已超出作用域。使用野指针可能导致程序崩溃或不可预测的行为。
|
21天前
|
存储 C语言
C语言32位或64位平台下指针的大小
在32位平台上,C语言中指针的大小通常为4字节;而在64位平台上,指针的大小通常为8字节。这反映了不同平台对内存地址空间的不同处理方式。
|
21天前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
14天前
|
编译器 C语言
【c语言】指针就该这么学(2)
本文详细介绍了指针与数组的关系,包括指针访问数组、一维数组传参、二级指针、指针数组和数组指针等内容。通过具体代码示例,解释了数组名作为首元素地址的用法,以及如何使用指针数组模拟二维数组和传递二维数组。文章还强调了数组指针与指针数组的区别,并通过调试窗口展示了不同类型指针的差异。最后,总结了指针在数组操作中的重要性和应用场景。
12 0
|
26天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
31 3
|
17天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
31 10
|
10天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。