是否可以在没有特定数据类型的情况下在C中创建指针

CLo*_*r32 0 c memory types pointers low-level

所以我开始了一个编程项目,我发现如果我可以在不声明指针的情况下制作指针char*,int*那么它会使一切变得更容易,等等,只需在其他地方指定大小即可.我四处搜寻但找不到任何有用的东西.

现在我的想法是将所有东西都变成一个char*并且只是将它们与位移和/或操作联合起来(如果它不是字符串).如果这对C来说太低了,我用什么语言来做这个,我宁愿不使用汇编,因为它不够平台.

编辑: 所以我忘了提到它应该在运行时分配内存,并且不要浪费太多内存我想根据大小分配内存.例如,我想为char大小的值分配1个字节,为int大小的值分配2个字节,依此类推.大小是在文件中预定义的,但在读取文件之前是不知道的,应该在运行时读取而不是编译时间.

小智 10

因此,在C中有一个通用指针类型:void *.

您可以隐式转换任何数据指针类型void *:

char foo[] = "bar";
void *ptr = foo;

// ...

char *str = ptr;
Run Code Online (Sandbox Code Playgroud)

但请注意,您仍然需要知道正确的类型.通过错误类型的指针访问对象将是未定义的行为.


有两件事你不能做void *:

  • 你不能在它上面做指针算术(这包括索引).void是一个不完整的类型,因此它没有已知的大小.一些编译器void *通过假设a的大小允许算术char,但这是扩展而不是便携式的.

  • 你不能解除引用void *.void是"没有",所以它没有意义.

  • @ CLover32这有点像你想要在运行时确定类型,这在C中是不可能的.编译的C程序没有任何类型信息.考虑一下您的解决方案,并将其作为一个不同的问题发布. (2认同)
  • "*我的意思是它是可能的,因为一些解释语言是用C*"< - 而且这些语言可能在某些`struct`中存储变量,以及类型信息.所以不,在C中不可能,您必须提出自己的解决方案来存储类型信息. (2认同)