我在理解指針時遇到了一些麻煩。在下面的代碼,我想打印一個變量的地址在2種方式,一旦使用地址運算符,然後使用指針:在C++中使用指針的變量值和地址
#include<iostream>
using namespace std;
int main (void)
{
int x = 10;
int *int_pointer;
int_pointer = &x;
cout << "x address=" << &x << endl;
cout << "x address w pointer=" << int_pointer << endl;
return 0;
}
x address = 0028FCC4
x address w pointer = 0028FCC4
可正常工作。但是,當我做同樣的事情,但現在使用字符類型的變量,我得到一些垃圾輸出:
#include<iostream>
using namespace std;
int main(void)
{
char c = 'Q';
char *char_pointer;
char_pointer = &c;
cout << "address using address operator=" << &c << endl;
cout << "address pointed by pointer=" << char_pointer << endl;
return 0;
}
address using address operator=Q╠╠╠╠£åbªp é
address pointed by pointer=Q╠╠╠╠£åbªp é
我不知道爲什麼會這樣。提前致謝。
這是正確的,但我補充說明一下。 C++庫爲某些類型重載<<運算符。 (char *)就是其中之一。 C/C++的一個壞處是它們將指針/數組和數組或char/string作爲同義詞處理。 <<操作符(char *)版本是您試圖打印字符串的東西,而不是指針值。當你打印指針時,最好的方法是將它們轉換爲void:reinterpret_cast(point)。 –
user3344003
2014-10-27 00:43:59
@ user3344003如果您有更正或改進它的合理建議,請隨時編輯我的答案,或者添加答案,而不是使用評論。 – 2501 2014-10-27 00:45:51
會做。當這是正確的時候,我不想添加另一個答案。 – user3344003 2014-10-27 00:47:11