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是"没有",所以它没有意义.
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |