據我瞭解一個字節由8位或字節的,它有一個地址分配給它我的問題是,如果我要了2個字我收到那麼4個不同的地址,還是我得到一個地址對於整個Word?任何解釋將不勝感激。感謝多存儲器地址
多存儲器地址
回答
如果做了分配,然後作爲一個整體有一個地址的分配,以及每個字節中它也有一個地址。
在分配的第一個字節的地址是等於分配的地址,其餘字節具有連續地址從那裏向上計數。
「進行分配」包括全局變量,自動變量,new
,malloc
,爲特定用途分配內存的任何內容。要使用技術術語,C和C++中的每個對象都是一系列具有連續地址的字節。
如果您的系統使用虛擬內存(幾乎所有內容都是這樣),則地址在虛擬地址空間中連續。它們不需要在物理內存中是連續的,但是虛擬內存的全部重點是你(程序員)可以忽略物理內存中的東西。
謝謝你的明確答案。所以如果我想分配一個像這樣的'char s [] =「test」',我會得到一個整個數組的地址,但也會得到s [0],s [1],s [2],s [ [4]'對嗎? –
@LeandroVillagran:是的,'s [0]'...'s [3]'將會有值''t'',''e'',''s'',''t''和' s [4]'將具有值'0'(它是nul終止字符)。你也可以看到'sizeof(s)'是'5'。 –
謝謝你的解釋@Steve Jessop我真的很困惑,但現在我明白了 –
通常認爲任何對象或變量的「地址」是該變量中第一個(最低)字節的地址。所以,如果你有一個類型爲std :: uint64_t(8字節)的變量,則指向該變量的指針將是它的第一個字節,而下面的7個地址包含其他7個字節。現在,爲了在其中這些字節存儲取決於具體的實現(查找小端與大端架構)。
希望有所幫助。
感謝這加強了@Steve Jessop的答案,我實際上昨天才瞭解到litte和big endian。謝謝Limne –
有錯過如[3],這是「t'.and S [4],它是 '\ 0'
在C中,除位字段的所有對象都從一個或多個字節制成:
C 2011(N1570)6.2.6.1表示「除了位字段,對象由一個或多個字節的連續序列組成,它們的數量,順序和編碼是明確指定的,所定義。」
當您訪問由多對象ple字節,例如int
(通常),則會爲您訪問該對象的所有字節。
對於天然地由所述處理器的硬件支持的任何物體,也有采取單個地址,但是,從該地址開始多個字節操作加載和存儲指令。例如,有「加載字」指令從一個字節的地址開始加載四個字節。 (關於「單詞」的大小沒有標準;它因計算機體系結構而異。)對於由C實現創建的對象(例如具有多個成員的結構體對象),C實現必須使用多條指令加載和存儲對象的所有部分。
- 1. 查找存儲器地址
- 2. 不同存儲器地址
- 3. 編輯存儲器地址
- 4. 存儲器地址中存儲了多少個字節?
- 5. Mongoid:IPv6地址存儲
- 6. 存儲多個電子郵件地址
- 7. C#靜態存儲器地址
- 8. 變存儲器地址歸屬EXEC_BAD_ACESS
- 9. 存儲器地址讀/寫VB程序
- 10. 字節地址存儲器和字地址
- 11. 存儲獲取和存儲IP地址
- 12. 以Java存儲IP地址
- 13. sqlite的IP地址存儲
- 14. 存儲地址簿記錄
- 15. 將dword存儲到地址
- 16. phpmailer addBCC不存儲地址
- 17. 方向堆疊更高的存儲器地址的,以降低存儲器地址
- 18. 存儲指針地址在malloced內存
- 19. 使用單獨的寄存器來存儲返回地址?
- 20. 加載地址存儲在MIPS寄存器中
- 21. 存儲在寄存器中的變量的地址
- 22. 本地存儲多個密鑰存儲
- 23. 基於IP地址的Google存儲訪問地址
- 24. 68k寄存器地址
- 25. PCIe MSI地址寄存器
- 26. 使用本地模擬存儲區存儲的Azure驅動器尋址
- 27. 機器內存地址的內存地址? (C語言)
- 28. 整數如何以四個存儲器地址存儲在存儲器中,即每個地址都按位填充?
- 29. C++:將地址存儲爲字符串
- 30. uintptr_t太小,無法存儲地址
你在問一個棘手的問題。一個詞是一組字符。你有一個指向開始的地址,但是每個字符都有它自己的地址,但是指向char數組的指針仍然指向位置0。 – Chemistpp
你應該更具體,通過顯示你的代碼。 ''如果我要求2個單詞「''是什麼意思? –
C和C++以'char's不是字節計數。取決於您的平臺,「char」可以是7,8,9,16位或其他任何內容。 – syam