[英]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.