【发布时间】:2014-08-14 20:36:02
【问题描述】:
为什么代码运行没有错误?
#include <stdio.h>
int main() {
int i="string"; //the base of string can be stored in a character pointer
printf("%s\n",i);
printf("%d",i);
return 0;
}
//在ideone.com语言c上编译
输出:
字符串
134513984 //一些垃圾(“字符串”的地址)
请解释c中的指针是否有一些灵活性。我在 c++ 中尝试过,它给出了错误:在初始化中无法将“const char*”转换为“int*”
【问题讨论】:
-
C 是一种宽松的语言,它赋予程序员很大的权力和责任感。如果你想做一些疯狂的事情(像这样),你可以!
-
您对 C++ 的警告是因为字符串文字在 C++ 中属于
const char []类型,但在 C 中属于char []类型(尽管您不得修改它们,即使在 C 中也是如此)。 -
@mafso:不,这不是原因。首先,在 C++ 中,它实际上报告了一个错误,而不是一个警告。其次,虽然您所说的实际类型是正确的,但由于相同的原因,代码在 C 和 C++ 中都被破坏了,
const与它无关。不同语言的诊断消息文本会有所不同,但都必须告知用户问题所在。