【发布时间】:2014-02-14 17:04:20
【问题描述】:
我现在正在学习 ANSI C 编程语言课程并尝试从讲师的幻灯片中运行这段代码:
#include<stdio.h>
int main()
{
int a[5] = {10, 20, 30, 40, 50};
double *p;
for (p = (double*)a; p<(double*)(a+5); ((int*)p)++)
{
printf("%d",*((int*)p));
}
return 0;
}
不幸的是,它不起作用。在 MacOS、XCode、Clang 上出现错误:"Assignment to cast is illegal, lvalue casts are not supported",在 Ubuntu gcc 上出现下一个错误:"lvalue required as increment operand"
我怀疑问题是编译器,因为我们学习 ANCI C,它有自己的要求,可能会违反其他标准。
【问题讨论】:
-
我认为编译器是对的,幻灯片是错的,
((int*)p)++部分充其量看起来很阴暗。 -
强制转换是一种操作。强制转换的结果不是您可以分配给的值。所以幻灯片错了。差不多就是这样。
-
这是可怕的代码,除了如何不编写有效、可读的代码之外,它并没有真正说明任何有用的东西。我严重怀疑你讲师的能力。
-
这张幻灯片应该展示什么?
-
讲师是否正在教授关于混淆 C 编程的课程?做这一切有什么意义?可能有一个更好的示例来演示类型转换和取消引用。