[C++基础] 字符指针

#include <iostream>
using namespace std;

int main() {
    char str1[] = "test";
    char str2[] = "test";
    const char str3[] = "test";
    const char str4[] = "test";
    const char* str5 = "test";
    const char* str6 = "test";
    cout << boolalpha << (str1 == str2) << " " << (str3 == str4) << " "
            << (str5 == str6) << endl;
}
// false false true
// 没有boolalpha则输出: 0 0 1

Debug:

字符指针

首先, 这题与是否const无关.

str1, str2, str3, str4都是字符数组, 都有各自的存储区, 它们的值是各自存储区的首地址, 因此各不相等, 输出false.

str5与str6为字符指针, 而非字符数组, 先请求的是一个指针的地址(初始化为随机地址), 然后赋值时它们都指向常量字符串"test", "test"存储在静态存储区. 即str5和str6为串"test"的地址, 所以str5==str6. 二者相等, 输出true.

boolalpha 用符号形式表示真假.

StackOverflow: Addresses of two pointers are same

这里面提到跟编译器的实现相关...

Java的String也差不多:

String s1 = "test";
String s2 = "test";
System.out.println(s1==s2);
// true