在C语言中,我知道我们可以用指针来实现这一点:
int *p; /* an int pointer (ptr to an int) */
int **pp; /* a pointer to an int pointer (ptr to a ptr to an int) */
甚至:
int **app[]; /* an array of pointers to int pointers */
int (**ppa)[]; /* a pointer to a pointer to an array of ints */
int (**ppf)(); /* a pointer to a pointer to a function returning an int */
int *(*pap)[]; /* a pointer to an array of int pointers */
int **fpp(); /* a function returning a pointer to an int pointer */
但我们能做点什么,比如三个指向无限的指针吗?例如。:
int ***ppp; /* a pointer to a pointer to an int pointer */
int ****pppp; /* a pointer to a pointer to a pointer to an int pointer */
...依此类推,直到无穷大。
指针的数量有上限吗?如果是,上限是多少?
C 11标准没有规定最大限度的限制,事实上,该标准规定“实现时应尽可能避免施加固定的翻译限制。”在脚注中。
最低限值由5.2.4环境限值给出:
实现应能够翻译和执行至少一个程序,其中至少包含以下每一个限制的一个实例:18)
一个合格的C编译器将提供至少12级的指针间接寻址。
本标准没有设定任何上限。它的意思是,一个编译器至少需要支持12个。
在实际代码中,它可以被认为是无限的。只有当你编写的程序编写的程序是人类永远不应该阅读的,这才是相关的。大多数程序员会说你应该把三星作为警告。没有真正好的理由,不要超过两颗星。
我在gcc上尝试了10000次,结果成功了。我现在想用10万美元。一件有趣的事情是编译需要非常长的时间。编译花了几分钟时间,唯一的语句是一个带有10000个星星的指针声明。
生成C文件的代码:
// gen.c
#include <stdio.h>
int main()
{
const size_t n = 10000;
printf("int main(){int ");
for(size_t i=0; i<n; i++)
printf("*");
printf("p;}\n");
}
运行:
$ gcc gen.c -c gen
$ ./gen > stars.c
$ gcc stars.c
对评论的答复:
这是一个有趣的实验,但我不会进一步研究。
多级指针概述 我们将指针变量理解为一个存储地址的变量。如果这个地址里面存储的依然是地址,那么我们就可以定义一个二维指针。通过一个二维指针,我们通过两次寻址操作就可以找到这个值。 比如我们定义一个int **p;这是一个二维指针,当编译器看到p的时候,它知道这是一个指针变量,指向一个地址;当它看到第二个的时候,它知道指向的地址里面依然还是地址。如下图所示: 如果我们将p[0]和p[1]分别指向两个字
本文向大家介绍详解C语言中的常量指针和指针常量,包括了详解C语言中的常量指针和指针常量的使用技巧和注意事项,需要的朋友参考一下 概述 对于新手来说,指针在c语言里总是一个非常难以理解的概念。在这篇文章中,我们将解释常量指针,指针常量,const pointer to const(ps:楼主以为这可以翻译成指向常量的常量指针)的区别 常量指针 让我们先来理解什么是常量指针。常量指针是指指针指向的地址
C 语言的指针常常被人们认为是 C 语言中的灵魂所在,可以完成很多高难度的操作。但是更多的人感觉 C 语言的指针的存在如同噩梦一般,因为稍不注意,就会引起灾难性的后果。 不管你是不是喜欢 C 语言中的指针,我们都要学习这种看起来很神奇的东西。因为指针这个概念不是 C 语言首创的,而是苏联的计算机科学家首创的。 1. 什么是指针? 指针是什么?这是来自灵魂的拷问。其实指针也是一种变量。我们之前也说过
指针变量保存的是地址,而地址本质上是一个整数,所以指针变量可以进行部分运算,例如加法、减法、比较等,请看下面的代码: 运行结果: 从运算结果可以看出:pa、pb、pc 每次加 1,它们的地址分别增加 4、8、1,正好是 int、double、char 类型的长度;减 2 时,地址分别减少 8、16、2,正好是 int、double、char 类型长度的 2 倍。 这很奇怪,指针变量加减运算的结果跟
问题内容: 我想知道我可以发送到SQL Server的UNION SELECT语句的数量是否受到限制?在一条SQL语句中,我最多可能要完成36个操作,因此它变得相当长,从字符角度来看。(而且,其中每个带有ASE WHEN语句的SELECT语句本身都有些复杂。) 问题答案: 从SQL 2008 BOL “ Transact-SQL语句中可以出现任意数量的UNION运算符” 同样来自MSDN “ SQ
多级指针举例 可能很多同学都执行过这个命令,ping www.baidu.com或者是ping www.qq.com,ping是一个命令,后面的网址就是它的传入参数。不同的参数会导致不同的运行结果。 下面就是我们main函数的标准写法,argc就是传入参数的个数,argv是一个字符串类型的二维指针。当我们需要传递下面四个字符串给main函数的时候,这四个是字符串的首地址不是连续的,我们就可以使用二