【发布时间】:2018-02-03 03:04:57
【问题描述】:
使用 void 指针解除对浮点变量的引用:
#include <stdio.h>
int main() {
float a = 7.5;
void *vp = &a;
printf("%f", *(float*)vp); /* Typecasting a void pointer to float for dereference */
printf("\n");
}
输出:7.500000
使用整数指针解引用变量:
#include <stdio.h>
int main() {
float a = 7.5;
int *ip = &a;
printf("%f", *(float*)ip); /* Typecasting an int pointer to float for dereference */
printf("\n");
}
输出:7.500000
两者的输出是相同的。当我们能够通过类型转换普通指针来解引用不同数据类型变量的原因是什么?
【问题讨论】:
-
使用
int *ip=&a;你打破了严格的别名。你说ip是指向某物的指针,但它实际上是指向不同事物的指针。使用void *的通用指针没有类型,它只是一个“指向某物的指针,无论它是什么”。 -
void main必须是int main。 -
@Someprogrammerdude 只有在取消引用
ip时,该代码才会破坏严格的别名。ip被转换回float*,所以代码只有实现定义的指针转换。
标签: c types type-conversion void-pointers