【发布时间】:2017-11-24 10:08:04
【问题描述】:
目标是编写一个函数,输出等于字符的字符串的第一个元素的地址,但是我对结果感到困惑。
当首先使用包含所述字符的字符串评估函数时,我得到字符串开头的地址和第一个元素的地址之间有 2 个字节的差异。例如。 0x7ffe559716d0 和 0x7ffe559716e0。
地址不应该一样吗?
#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;不输出 char 数组中第一个元素的地址,尝试与cout << (void*)str1 << endl;相同。 -
我投票决定关闭它是因为一个简单的印刷错误,因为你只是没有考虑
std::string是如何实现的;它不是char[],因此它的地址当然与其缓冲区中第一个char的地址不同。 -
@gsamaras 哎呀,我没有发现变量是
std::string。所以OP实际上需要cout << (void*)str1.c_str() << endl; -
我刚刚发布了一个答案@user0042 并使用了
data()。我怀疑c_str()也会成功!你认为我应该在我的回答中包括这个吗?
标签: c++ arrays string pointers memory-address