是否可以将使用指针编写的任何程序转换为另一个不包含任何指针的程序?如果是,我们可以自动化该过程吗?
我读了几篇关于c到java字节码编译的论文,发现一个主要问题是“指针问题”。所以我认为如果上面的过程可以完成,那么它可以像预处理步骤一样被包含(虽然它本身可能是一项重大任务)然后尝试转换为jvm字节码可能更简单...
提前致谢
答案 0 :(得分:0)
指针对于C来说是相当重要的。虽然C 可能在没有指针的情况下完成turing-complete,但如果没有它们就重写任意C是不切实际的。
没有指针你不能做的事情:
- 动态(手动)内存分配。
- 通过引用传递。
假定数组衰减指向一个帽子,你实际上也不能使用数组,所以你留下了不能是数组的自动,静态和全局变量。
tl; dr:否
答案 1 :(得分:0)
理论上,您可以通过使用数组模拟单个数据结构甚至整个内存(静态数据,堆和堆栈)。但问题是这是否非常实用;它可能需要重写您需要的每个基于指针的标准库函数。
无论如何,对Wikipedia有一个很好的解释:
可以使用(通常为一维)数组的索引来模拟指针行为。
主要针对那些不支持指针但支持数组的语言,可以将数组视为并处理,就好像它是整个内存范围(在特定数组的范围内)一样,可以认为任何索引都可以等效于汇编语言中的通用寄存器(指向单个字节但其实际值相对于数组的起始位置,而不是其在内存中的绝对地址)。假设数组是一个连续的16兆字节数据结构,可以使用31位无符号整数作为模拟指针的数组名称直接寻址和操作单个字节(或数组中的连续字节串) (这与上面显示的C数组示例非常相似)。指针算法可以通过在索引中加或减来模拟,与真正的指针算法相比,只需要最小的额外开销。