gpt4 book ai didi

c++ - 第一个字符串元素的地址产生意外结果

转载 作者:行者123 更新时间:2023-11-28 01:40:14 25 4
gpt4 key购买 nike

目标是编写一个函数,输出等于一个字符的字符串的第一个元素的地址,但是我对结果感到困惑。

当首先使用包含所述字符的字符串评估函数时,我得到字符串开头地址和第一个元素地址之间的 2 个字节的差异。例如。 0x7ffe559716d00x7ffe559716e0。地址不应该一样吗?

#include <iostream>
#include <string>
using namespace std;

const char* first_char(const char* str, const char ch)
{
for (int i = 0; str[i] != 0; ++i)
{
if (str[i] == ch)
return (i+str);
}
return 0;
}

int main() {
string str1 = "jasdfgjhk";
const char ch1 = 'j';
cout << &str1 << endl;
//should be the same address as above?
cout << (void*)first_char(&str1[0], ch1) << endl;
return 0;
}

最佳答案

改变这个:

cout << &str1 << endl;

为此:

cout << (void*)str1.data() << endl;

您将获得与您的函数返回的地址相同的地址。

原因是std::string不仅仅是一个字符数组,它是一个类,它有一个数据成员是一个数组,存储字符串的字符。

通过使用 data() ,您将获得该数组。当您打印它的地址时,它会像以前一样为您提供数组和类的实际地址

关于c++ - 第一个字符串元素的地址产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47470870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com