【发布时间】:2018-04-16 22:43:39
【问题描述】:
我只是好奇将值 888 分配给 c 是否正确,如果不是,那么为什么。我没有发现任何说它不是的东西,当我查看 c 语言规范时,它看起来好像是正确的。
int** ppi;
int c = 6;
ppi = (int**)(&c);
*ppi = 888;
我在几个 IDE 和几个编译器中使用过它,但没有一个给我错误。不过有朋友说这段代码应该会报错。
我试图在不添加中间指针的情况下更改 c 的值。 我知道以下方法会起作用,但我不确定上述方法是否也能起作用。
int** ppi;
int* pi;
int c = 6;
pi = &c;
ppi = π
**ppi = 888;
【问题讨论】:
-
显然不正确。它可以在大多数机器上“工作”,因为它将
c设置为 888。不过,您为什么要这样做有点神秘。 -
你不能使用非常好的编译器。我的警告我
*ppi = 999行,正如我所期望的那样。 -
您想要完成什么?为什么不能使用
int *pi? -
它会抛出类型转换不兼容的警告,而您应该知道即使它是可编译的,它也永远不可用。
-
铸造本身是完全可以接受的,只要您不违反任何对齐要求(否则,行为未定义)。但是你以后做的事情(即
*ppi = 888)毫无意义。*ppi是int *。在 C 中,不允许将整数值888分配给指针对象。类型不同。这也需要一个明确的演员表。但即使有演员表,它仍然没有任何意义。你为什么要把888分配给一个指针?
标签: c