c++字符数组地址的问题

问题遇到的现象和发生背景

定义了一个char类型数组,想输出他的首地址,输出乱码。

遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
int main() 
{
    char arr2[] = {'a','b','v'};
    char * p2 = arr2;
    cout << "arr2首地址为:" << &arr2 << endl;
    cout << "arr2+1地址为:" << p2+1 << endl;
     
    system("pause");
    return 0;
}

运行结果及详细报错内容

img

(1)直接用arr2来输出地址,其实是为输出字符串,但是你的字符数组里没有结尾符,所以就会输出数组中的值,及其后面越界内存中的随机值,至到0的出现;
(2)也是一样,直接用指针输出,也会输出字符串,解释同上;
都加上取地址符&就可以

望采纳


输出字符数组的首地址和其他地址时,会出现乱码的情况是因为你使用了 cout 输出字符数组的地址,而字符数组的地址是一个指针类型的值,而 cout 输出字符串时会把指针解释为字符串,因此会出现乱码的情况。

如果你想要输出字符数组的首地址和其他地址,可以使用 printf 函数输出地址,例如:

printf("arr2首地址为: %p\n", arr2);
printf("arr2+1地址为: %p\n", p2+1);

ChatGPT为您解答
在你的代码中,你使用了 &arr2 和 p2+1 输出了两个地址。但是,如果你直接输出地址,你会看到乱码。这是因为,在输出地址时,C++ 编译器会将地址视为字符串并尝试输出它。但是,地址并不是字符串,所以你会看到乱码。

为了正确输出地址,你需要使用一种类型与地址匹配的方法。例如,你可以使用 std::hex 输出地址的十六进制值:

#include <iostream>
#include <iomanip>

int main() 
{
    char arr2[] = {'a','b','v'};
    char * p2 = arr2;
    std::cout << "arr2首地址为:" << std::hex << &arr2 << std::endl;
    std::cout << "arr2+1地址为:" << std::hex << p2+1 << std::endl;
    std::system("pause");
    return 0;
}

希望能帮助到您

<<有重载,对于void*才会输出地址