問題:
在C++中,為什么char *p="hello world"; cout<<p<<endl;打印出來的是字符串,而不是地址?
回答:
指針p指向字符串常量"hello word",即p中存放該字符串的首地址,c++為了兼容c語言,當cout輸出常量字符串的首地址時實際輸出該字符串(對cout的<<運算符進行了重載,cout<<p被翻譯為輸出p指向的字符串值)。
cout<<(void *)p;則為p的內容,即字符串的地址,而cout<<&p;為指針變量的地址,而非上述字符串的地址。
CODE:
char *p="hello world"; //輸出字符串首地址 方法1 cout<<(void *)p<<endl; //輸出字符串首地址 方法2 printf("%p\n",p); //輸出字符串 cout<<p<<endl; //輸出指針變量的地址,而非字符串地址 cout<<&p<<endl;