c++ - 如何打印出C-String的内存地址?

标签 c++ arrays pointers memory c-strings

该函数打印动态数组每个内存位置的地址。这是正确的方法吗?

int main()
{
    char str[] = "This is a test";
    printAddresses(str, strlen(str));
}

template <class type>
void printAddresses(type *item, int n)
{
    cout << "Printing Addresses..." << endl;
    for (int i = 0; i < n; i++)
    {
        cout << "Index " << i << ": " << ((&item) + i)  << endl;
    }

}

我还听说我应该使用:

cout << "Index " << i << ": " << (void*) &item[i] << endl;

但这给了我不同的内存地址。我不确定哪个是正确的。

最佳答案

正确的地址是你打印时得到的(void*)&item[i] .

item已经是一个指针; &item[i]也是.你有兴趣打印这个指针的值,你需要将它转换为 void*打电话前 <<在上面。

打印时 ((&item) + i)你正在做一个额外的间接级别( &item 是一个指向指针的指针),所以你打印 item 的地址-指针,而不是什么的地址 item指向。

注意:从 C++11 开始,您可以使用 std::addressof 函数代替运算符 &为了更好的可读性和避免潜在的问题 T为运算符 & 提供重载:

cout << "Index " << i << ": " << std::addressof(item[i]) << endl;

关于c++ - 如何打印出C-String的内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37911478/

相关文章:

c# - 如何将列添加到数组 C#

javascript - 有没有一种优雅的方式来连接数组的数组?

c++ - 复制构造函数指针对象

c++ - 这不是一个真正的指针?

c++ - 无法在支持 bz2 的 Linux 上构建 boost

c++ - 击败编译器

php - 如何在循环之前按键值对 json 字符串进行排序?

c - 解释指针数组

c++ - 如何读取 ostream 的输出?

c++ - 在非 C++ 异常情况下解锁临界区