提问人:Bele 提问时间:8/11/2023 最后编辑:phuclvBele 更新时间:8/14/2023 访问量:26
为什么我的指针指向字符串的第一个字符的地址是 != 字符串地址?
Why is the address of my pointer to first char of string != string address?
问:
如果我从字符串“s”和字符串的第一个字符打印地址,为什么地址会不同,保存在指针“p”中?不应该是一样的吗?我得到相同的字符,但地址不同。
#include <stdio.h>
#include <string>
int main()
{
std::string s = "hello";
char *p = &s[0];
printf("%p\n", s);
printf("%p\n", p);
printf("%c\n", s[0]);
printf("%c\n", *p);
}
答:
1赞
T W Bennet
8/14/2023
#1
您可能正在考虑普通的 C 字符串,其中您的指针会匹配。
在 C++ 中,std::string 是包含数据的对象(或者更可能是指向它的指针),因此对象及其包含的数据将位于不同的位置。
评论
std::string s
不是数组。对于对 std:string 缓冲区的只读访问,请使用 .c_str();方法。请参见:cplusplus.com/reference/string/stringchar s[x]
s
不是指针。所以是未定义的。printf("%p",s)