c++ - 常量 char* 与 char*

标签 c++ string pointers

这是我的书上说的:

char *p="Hello"; //pointer is variable, string is constant
*p='M'; // error
p="bye"; // works

好吧,在 C 中我的第二行没有给我任何错误,在 C++ 中也没有。

我在 Windows 7 上使用 Turbo C++。如果我在 gcc 或其他程序中尝试,那么上面的事情是否成立。

同样在类似的行上,如果上面的代码被书中正确解释,

#include<iostream.h>
void display(char*);
void display(const char*);
void main()
{
char* ch1="hello";
const char *ch2="bye";
display(ch1);
display(ch2);
}

void display(char* p)
{
cout << p << endl;
}

void display(const char* p)
{
cout << p << endl;
}

现在我的书是否认为 char*const char* 相同,因为如果是这样,那么上面的代码将不起作用,因为参数将相同?

(虽然我在 turbo +windows 上得到了输出 Hello bye。)

哪个是正确的?

最佳答案

语言规范不是编译器对你的 promise ,而是你和编译器双方签署的相互契约。 (当然是比喻。显然这不是字面意义上的具有法律约束力的契约(Contract)。)如果您通过编写 *p='M'; 违反了契约(Contract),那么您已经触发了“未定义行为”,并且你不能指望编译器有任何特定的行为:也许它会很严格并给你一个编译错误,也许它只会在运行时变得不稳定。 . .你没有遵守协议(protocol),它现在可以为所欲为。另请参阅:http://catb.org/jargon/html/N/nasal-demons.html .

关于c++ - 常量 char* 与 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8102397/

相关文章:

c++ - 将 std::vector<int> 项传递给可变参数函数

c++ - 在类中重载运算符

c - 对象在 C 中返回后返回垃圾值

c - 指向 C 中字符串的指针?

c - 为什么在使用指向指针的指针时出现 malloc() 的段错误?

c++ - HashMap 和有序遍历

c++ - 比较 std::vector 大小时出错

python - 该函数接受输入字符串 x 列表并返回整数 ptr

将字符串拆分为标记并计算元音的 C 程序

c - 为什么这个 Perl 循环遍历字符串然后字符这么慢?