【发布时间】:2021-06-28 13:17:22
【问题描述】:
考虑以下程序:
#include <iostream>
using namespace std;
int main()
{
const char* p = "12345";
const char **q = &p;
*q = "abcde";
const char *s = ++p;
p = "XYZWVU";
cout << *++s;
return 0;
}
我已经算出指针算术,并且我已经算出s指向p的第三个字符。但是,在执行该程序时,它会打印“c”(这是 abcde 的第三个字符)而不是“Z”。我在这里的疑问是在这条线上
p = "XYZWVU";
我们已经让指针p指向字符串的第一个字符(XYZWVU),那么为什么这个程序不打印'Z'呢?
请指导。
【问题讨论】:
-
更简单的版本:
const char* p = "12345"; const char *s = p; p = "XYZWVU"; std::cout << *s;。更改p的值不会更改s的值。s仍然指向"12345"。 -
你能解释一下改变 p 的值如何不影响 s 的值吗? @PeteBecker
-
你的问题和
int i = 5; int j = i; i = 6;一脉相承,怎么j还是5? -
@loveofprogramming -- 更改
p不会修改s,因为 C++ 不是电子表格。const char *s = p;复制p的值到s。它不记得它是从哪里得到这个值的。
标签: c++ pointers declaration string-literals pointer-arithmetic