char*和char []

Gau*_*mar 4 c++

为什么这是对的?

#include<iostream>
using namespace std;
int main()
{
    char *s="raman";
    char *t="rawan";
    s=t;
    cout<<s;

return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这是错的?

#include<iostream>
using namespace std;
int main()
{
    char s[]="raman";
    char t[]="rawan";
    s=t;
    cout<<s;

return 0;
}
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 15

在第一个例子中,s=t指针分配.在第二种情况下,s=t尝试将指针值(由数组表达式的隐式转换或"衰减"产生t)分配给数组对象.C++不允许数组赋值.

C和C++在这个领域恰好相似; comp.lang.c FAQ的第6节很好地介绍了数组和指针之间的关系.


Alo*_*ave 7

第一个示例将指针指向另一个有效的指针.

第二个例子将一个数组分配给另一个数组,这个数组在C&C++中都不允许.


这个优秀的C++ FAQ条目和这个答案应该是一个很好的阅读.