char* s1 = "abcd"; // 1
char s2[] = "abcd"; // 2
char s3[] = { 'a', 'b', 'c', 'd'}; // 3
以上三种定义都能通过编译。
其中s3的初始方式是非法的,因为没有终止符。
s1和s2的定义合法。
strlen( s1) 和strlen(s2)都等于4,s1[4]和s2[4]都是0,所以都可以通过cout<<s1<<s2的方式正常输出。
但s1指向的常量字符串,这意味着*s1='x'这样的语句在运行时会出错,而*s2='x'则没问题。