簡體   English   中英

打印字符數組地址的正確方法

[英]Proper way to print address of character array

所以,我最近一直在研究字符數組,我試圖打印字符數組每個元素的地址。

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

上面的代碼給了我以下 output:

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]的 output 感到不舒服。 字符地址不應該相隔 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]) << " ";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM