【发布时间】:2019-09-27 07:55:33
【问题描述】:
如果cstring是一个指针,那为什么它可以直接取值呢?其次,为什么 *cstring 的结果不等于整个字符串?第三,cstring是一个指向常量字符的非常量指针,那为什么改变它的值而不改变它的地址呢?
#include <cstdio>
#include <conio.h>
#include <iostream>
using namespace std;
int main()
{
const char* cstring = "string";
cout << cstring << endl << *cstring << endl << &cstring << endl;
cstring = "foo";
cout << cstring << endl << *cstring << endl << &cstring << endl;
_getch();
return 0;
}
【问题讨论】:
-
cstriing是一个const char *,所以它的值是单个char的地址。根据语言规则(即 C 和 C++),当使用字符串文字初始化或分配给字符串文字时,该地址是该字符串文字中第一个字符的地址(即初始化时"string"的's'和分配后的'f'的"foo")。由于cstring是一个变量,它的地址不能改变,但它的值(假设const限定符一致)可以赋值。
标签: c++ string pointers ostream