打印字符数组地址的正确方法

Proper way to print address of character array

本文关键字:方法 组地址 字符 数组 打印      更新时间:2023-10-16

所以,我最近一直在深入研究字符数组,我正在尝试打印字符数组每个元素的地址。

char a[4] = {'i','c','e',''};
for(int i = 0; i < 3; ++i){
cout<<(void*)a[i]<<" ";
cout<<&a[i]<<" ";
cout<<a[i]<<endl;
}

上面的代码给了我以下输出:

0x69 ice i
0x63 ce c
0x65 e e
test.cpp: In function ‘int main()’:
test.cpp:29:23: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
cout<<(void*)a[i]<<" ";
^

我对(void*)a[i]的输出感到不舒服.字符地址不应相隔 1 个字节。我看到0x69然后是0x63,然后是0x65.这有什么原因吗?地址表示形式与其显示的警告标志之间是否存在关系。

我正在尝试打印字符数组中每个元素的地址

(void*)a[i]是将元素(char(本身转换为void*,而不是元素的地址。

您应该将每个元素的地址获取为:

cout<<(void*)&a[i]<<" ";
//           ^

或者最好使用static_cast.

cout<<static_cast<void*>(&a[i])<<" ";

您的打印值转换为void*,要打印地址,您需要

cout<< static_cast<void*>(&a[i])<<" ";

目前,您没有获得地址。而是将字符的 ASCII 值强制转换为void*。这就是值不正确的原因。

您要做的是使用static_cast并获取元素的地址&a[i]

cout << static_cast<void*> (&a[i]) << " ";