如何解决这个 char* 变量指向哪里?
我想知道 s
和 *s
是什么意思? s
指向哪里?
char *s = "my name"
cout<<*s<<endl;
cout << s << endl;
cout << &s << endl;
cout << s+1 << endl;
cout << &(s+1) <<endl; //error code
我的输出:
M
My name
0x61fe18
y name
解决方法
符合的编译器可能向您显示类似的警告:
warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wwritable-strings]
这是因为在标准 C++ 中,如果你想用字符串字面量初始化一个 char*
,你需要让它 const,因为 C++ 中引用的字符串是一组 const chars
。
const char* s = "my name";
声明一个指向常量空终止字符串“my name”的指针。指针将指向第一个元素 (const char
),但如果您尝试这样打印 s
:
cout << s << endl;
记住:s
是一个指针,指向一个空终止字符串。
将打印每个后续的 const char
,直到找到空终止符 \0
。
但是,由于 s 指向这些 const char
中的第一个,如果您尝试“强行”打印 s 的 value-at-address,请使用:
cout << *s << endl;
打印字符串的第一个字母。
现在,来到:
cout << s+1 << endl;
作为 s
,同样是一个 指针,指向一个空终止字符串,并指向字符串的第一个 const char
,如果我们对它做一些算术加一,我们只会增加 s
的值,指针,朝向后面的 const char
。但请记住,由于您已经声明了一个指向 const char
序列的指针,因此这些字符将位于其他地方,而不是您的想象。观察你的最后一行:
cout << &(s+1) << endl
它会给你一个错误,因为 (s+1) 是一个 rvalue,这基本上意味着它没有定义的内存地址。它可能会在计算期间存储到某个注册表位置。基本上就像说&1
,当然1
没有指针。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。