为什么const char*foo ="Hello"; 编译但不是const int*foo = 5;?

Gol*_*ame 1 c c++ arrays pointers

如果我错了,请纠正我,但我已经假设了这行代码:

const char *foo = "Hello";
Run Code Online (Sandbox Code Playgroud)

意味着在堆栈的某处创建了一个充满"Hello"的字符数组,而foo是指向它的指针.在这种情况下,我不明白为什么这行代码给出了"从'int'到'const int*'的无效转换"

const int *foo = 5;
Run Code Online (Sandbox Code Playgroud)

它不会只是在堆栈的某处创建一个5的整数并且foo指向它吗?

vso*_*tco 5

因为"Hello"是一个类型(在C中)和(在C++中)的字符串文字,它衰减到一个类型(在C中)或(在C++中),与你绑定它的指针相同.另一方面,是一个rvalue,它的类型是,所以你不能将它绑定到类型的指针.char [N]const char[N]char*const char*5intconst int*

你可能会觉得很有用.