[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