回答
&a[0]
有型號char *
。流運算符<<
故意超載參數const char *
以輸出以該地址開始的以零結尾的字符串(C樣式字符串)。例如。如果你這樣做
const char *p = "Hello World!";
cout << p;
它是的<<
重載版本,使得確保"Hello World!"
字符串本身被髮送到輸出,而不是指針值。
這正是你的代碼輸出整個字符串的原因。由於C++ 11 std::string
對象需要將其數據存儲爲零終止字符串,並且&a[0]
不是指向存儲在a
對象內的字符串開頭的指針。
附錄:使用'&a [0]'而不是'a'的性能較差,不能應付嵌入式零... – Deduplicator 2015-01-26 23:29:56
當打印指向標準庫輸出流的指針時,如果它是char*
或const char*
,則會打印指向的以null結尾的字符串,而不是地址本身。如果你想擁有的地址印:
cout << static_cast<const void*>(&a[0]);
(花絮:如果指針類型爲無法轉換爲const void*
要麼---因爲它是一個函數指針或爲成員或者是volatile-- - 然後將其轉換爲bool
。)
&a[0]
收益類型char*
。這是operator<<()
過載的類型。該特定的重載打印從地址開始的字符,直到找到空字符'\0'
。它不會像你期望的那樣打印地址。
由於您所需要的地址,有標準庫的std::addressof()
:
std::cout << std::addressof(a[0]);
你也可以轉換爲void*
這幾乎是像上面的變種:
std::cout << static_cast<void*>(&a[0]);
'std :: addressof(a [0])'與這裏的&a [0]'完全相同,對嗎? – 2015-01-27 01:30:32
@MattMcNabb是的,它們都具有相同的效果。但'std :: addressof()'不會考慮爲用戶定義的類型重載'operator&'。 – 0x499602D2 2015-01-27 01:32:16
- 1. PHP中的$ a = 0和$ a ='0'之間的區別
- 2. str [0]和str.charAt(0)之間的區別
- 3. 「return 0」和「exit(0)」之間的區別
- 4. 基數「*」和「0 .. *」之間的區別 - UML
- 5. srand(1)和srand(0)之間的區別
- 6. Array.length = 0和Array = []之間的區別?
- 7. next()和next().CharAt(0)之間的區別;
- 8. LinearRegression()和Ridge(alpha = 0)之間的區別
- 9. $ 0和$ SHELL之間的區別
- 10. 表達式之間的區別:int * a = 0; int * a = 10;
- 11. 之間有什麼區別{0}和{0,數字,整數}
- 12. 這個程序中的&a [0]和a之間的區別是什麼?
- 13. list.First(),list.ElementAt(0)和list [0]之間的區別?
- 14. virtual void funcFoo()const = 0和virtual void funcFoo()= 0之間的區別;
- 15. [0-9] +和[0-9] ++之間的區別是什麼?
- 16. {0}和「」之間有什麼區別?
- 17. BigDecimal(「0」)和BigDecimal.ZERO之間有區別嗎?
- 18. {0}和+之間有什麼區別?
- 19. firstChild和[0]之間有什麼區別?
- 20. strlen()== 0和empty()之間有區別嗎?
- 21. '(無符號)1'和'(無符號)〜0'之間的區別
- 22. @string和@ +字符串之間的區別?
- 23. 字符串和AttributedString之間的區別
- 24. 「#if Foo - 0 == 0」和「#if defined(Foo)&& Foo == 0」之間的區別是什麼?
- 25. `[blah addObject:@「1」];``和`[blah insertObject:@「0」atIndex:0]之間有什麼區別;`?
- 26. (char)0和'\ 0'之間有什麼區別? in C
- 27. 字符串插值和字符串串聯之間的區別
- 28. 未定義的引用 - 應該在C++中的`a = -b;`和`a = -1 * b;`和`a = 0-b'之間有區別嗎?
- 29. String [] a和String之間的區別... a
- 30. 字符串[]和[字符串]之間的區別
你所得到的基本' char *'在該字符串中詳細解釋[answer](http://stackoverflow.com/a/4152881/2458319) – mty 2015-01-26 23:25:54