【发布时间】:2013-01-08 10:03:38
【问题描述】:
我认为在将值分配给指针时,您应该使用 * 运算符,但我看到了类似的代码
char *a;
void *b;
b = "Hello";
a = b;
printf("%s", a);
当我编译它并打印 Hello 时这是合法的。不需要指向无效解除引用的指针吗?
【问题讨论】:
-
你想错了。
*用于分配给pointee。 -
是的,我的术语不正确,但是您从上面的代码中知道我的意思吧?
-
您的代码中不涉及解引用。只有地址分配给指针。为了使这个分配工作 l.h.s 和 r.h.s 必须兼容,即:具有相同的数据类型。 void 指针是一个特殊的指针,它可以指向任何 type,您可以将 void 指针类型转换回它所指向的确切类型。在 C 中,您可以在没有任何显式转换的情况下执行此操作,因为它是一种弱类型语言,而在 C++ 中则需要显式转换。
-
@Jong-BeomKim:我不认为这只是你的“术语”。感觉更像是一种真正的误解,而您在语言中混淆源和目标的事实只是一个症状。一旦你以正确的方式思考这个问题,我相信这个问题的答案对你来说是显而易见的。
-
@Kerrek SB:不,我知道 * 用于为指针指向的内容分配值。我的问题只是关于 void 的指针。我的 C 教程仅显示了上面的代码示例,并没有解释为什么在使用指向 void 的指针时不需要 * 运算符。无论如何,谢谢你的回答。我应该使用准确的术语。