c - 可以转换为在 C 运行时确定的给定类型的指针吗?

标签 c memory-management

我相当确定这个问题的答案是“不,别傻”,但正如他们所说,没有愚蠢的问题(只有愚蠢的人问这些问题)。

我想计算一个数组的偏移量。我有一个 void * 句柄和 sizeof(element)。我没有 x* 指针(其中 x 是元素的类型)。

有什么方法可以将 void * 指针转换为给定大小之一,以便我可以根据该大小进行指针算术?目前,我正在转换为 char * (假设 char 是 1 个字节*),然后将 sizeof 值乘以偏移量。如果我能以某种方式转换指针,那么我就可以使用数组语法,这会更干净。

正如我所说,我 99% 确信这是不可能的,我基本上是在要求 C 没有的语言级类型表示。但值得一问。

*我宁愿不这样做,因为这并不总是正确的。

最佳答案

正如一些人在评论中所说,sizeof(char)保证为 1。C99 标准的相关部分在第 6.5.3.4 节中,描述 sizeof运算符:

When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result [of the sizeof operator] is 1.

这意味着强制转换 void *char *并添加 N * sizeof(element)是正确且惯用的。

(C 是静态类型,因此您无法转换为运行时确定的类型)。

关于c - 可以转换为在 C 运行时确定的给定类型的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3318931/

相关文章:

c - 函数指针上的 __attribute__

c - 是否可以将 C 文件编译为 .app 而不是 .exe 文件?

c - 打印文件的二进制表示

c - 未能释放字符指针内存 c

c++ - 为我的 AI 算法设置内存限制?

Linux 内核透明大页面 (thp) 在 EC2 实例上处于事件状态?

c - 当连接打开但没有发送数据时,send() 和 recv() 返回什么?

c - 使用递归函数反转字符串

c# - 列出所有进程及其当前内存和 CPU 消耗?

java - 无法让 Mule 3.4.0 使用超过 4GB 的内存