[英]char* - why is there no address in the pointer?
我有一個關於char*
的基本問題char*
我不明白
char* aString = "Hello Stackoverflow";
指針指向字符鏈的第一個字符。
cout << *aString; // H
但為什么整個字符串都保存在指針中?
cout << aString //Hello Stackoverflow
我希望有一個地址,不是指針中保存的地址嗎? “Hello Stackoverflow”的地址在哪里?
任何幫助非常感謝
operator<<(ostream&, char const*)
有一個重載,它輸出從該指針開始的以null結尾的字符串,並且優先於操作符ostream::operator<<(void*)
,它將輸出該地址。
如果需要地址,請將指針強制轉換為void*
。
從該位置開始按順序保存字符串。 C ++繼承的C規則只是說當你嘗試將char *
用作字符串時,它會一直讀取字符,直到遇到0 字節 。
如果你想獲得一個地址,告訴cout
不要把它解釋為“串”:
std::cout << (void *)aString << std::endl;
標准陳述在哪里0 =='\\ 0'?
從C ++ 11草案2.3-3節:
基本執行字符集和基本執行寬字符集應各自包含基本源字符集的所有成員,以及表示alert,backspace和回車符的控制字符, 以及空字符(分別為null寬字符),其表示具有全零位 。
aString
確實包含一個地址,但是你的代碼選擇的operator<<
的重載( operator<<(ostream&, const char*)
)碰巧打印的不是它給出的地址,而是從那個地址開始的以null結尾的字符串。
如果要打印地址,可以通過將aString
強制轉換為void*
來使用ostream::operator<<(void*)
重載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.