为什么我的指针指向字符串的第一个字符的地址是 != 字符串地址?

Why is the address of my pointer to first char of string != string address?

提问人:Bele 提问时间:8/11/2023 最后编辑:phuclvBele 更新时间:8/14/2023 访问量:26

问:

如果我从字符串“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);
}
C++ 字符串 指针

评论

2赞 Dave S 8/11/2023
std::string s不是数组。对于对 std:string 缓冲区的只读访问,请使用 .c_str();方法。请参见:cplusplus.com/reference/string/stringchar s[x]
1赞 selbie 8/14/2023
s不是指针。所以是未定义的。printf("%p",s)
0赞 user207421 8/14/2023
指针的地址不可能与它所指向的地址相同,除非它指向自身。你的问题没有意义。此外,这不是您的代码所展示的。

答:

1赞 T W Bennet 8/14/2023 #1

您可能正在考虑普通的 C 字符串,其中您的指针会匹配。

在 C++ 中,std::string 是包含数据的对象(或者更可能是指向它的指针),因此对象及其包含的数据将位于不同的位置。