C 中的一個簡單的地址問題。C語言裡地址的問題

2023-03-26 07:30:05 字數 1588 閱讀 1873

1樓:網友

書上說的不一定完全正確,要有懷疑精神,尤其是計算機這東西。對於這個問題,「16位機器上,陣列的起始地址是0x00000100」這句話本身我覺得就有些誤導的成分。我推薦你多看國外的計算機書籍,因為國內的教材一般只講結果,而不去告訴讀者為什麼(可能作者也不知道為什麼),就像「16位機器上,陣列的起始地址是0x00000100」只是個結果,但是為什麼是這樣?

說實話,我也不知道,但是從這個事情我們似乎可以得到一些經驗,就是這樣的書最好少看。

計算機程式設計本身就是比較靈活的理科學科,學習的時候應該多思考,祝你好運!

2樓:匿名使用者

我沒看過錢能的書,我的理解是這樣的:

16位是指暫存器的位數,而不是指定址位數,因為具體使用的時候,我們是用一個"基址暫存器偏移16位+定址暫存器"表示一個地址。

由於基址暫存器16位,向左偏移16位,因此地址的位數為32位。

3樓:古人生活樂

這裡的地址和機器硬體無關,windows是一個32位的作業系統,16位機器上能通過段選擇子的方式來實現這個32位的地址,也就是段加段內偏移量。

「可是,如果我們把00000100轉化為2進位制,不是有32位嗎?他當時的16位機器是怎麼得到這個地址的!」

當時的機器就是通過段選擇子來實現的。

4樓:匿名使用者

16為應該是是說cpu內部運算時的,而不是儲存器的地址訪問空間。

5樓:匿名使用者

沒有人規定陣列的起始地址是多少,建議你看看c++的iso標準。

c語言裡地址的問題

6樓:匿名使用者

可以理解成記憶體就是一個大賓館,裡面的房間都有門牌號,這個門牌號就是地址的值,房間就是一個空間(空間多大呢?比如int的可以用sizeof(int)來算)。

這個地址是有值得,用十六進位制來表示&x(hex)。或者%p列印地址。

陣列的(首)地址就是陣列名,比如int s[10],s就是地址。

指標,p是指標本身,*p才是指標這個空間(房間中,p有自己的房間號,*p是p的房間裡面存的一個房間號)中的儲存的地址。

但是真正用的時候,一般不用地址做運算,都是用地址裡面的資料。gets(s)也是對這個地址的連續空間裡面進行資料的輸入。

7樓:網友

cpu暫存器、記憶體都會定義起始地址為零,然後用偏移來找到對應的地址。對於x86, 則地址是佔4bytes的unsigned int; x64為地址為佔8bytes的unsigned int

8樓:匿名使用者

是具體的數。

在記憶體空間中,這些資料是存放在記憶體空間中,怎麼找到呢,就是通過地址來找的。

二進位制位是最基本的單元,稱為byte

計算機把8個這樣的位弄成一組,成為位元組。

為每個位元組編上號碼,這個就是地址,通過這個地址,就可以找到所要的資料如同一個小區,想找一個業主,是通過幾號樓幾單元幾樓來找一樣,呵呵兩個地址可以做減法運算(表示兩個地址之間的隔著多少個位元組),也可以一個地址減去一個常數。

c語言首地址問題

簡單的c語言問題,一個簡單的C語言問題

在c語言中a b c這種寫法是不對的 應該寫成a b b c 在你的演算法中a b c的值不確定 當a小於b時 if a b c 就會變成if 0 c 所以結果會發生錯誤 好吧 看的我頭大了,要不我給你寫一個 我上次一個就用了個三目運算子就算出來了!你這個程式就是輸出最大數 最小數 平均數 就用了8...

關於c語言的簡單問題,一個關於c語言的簡單問題

scanf f,radius 改為scanf f radius printf f n,area 改為printf f n area 恩 你的錯誤就是printf和scanf函式的格式不對啊其它的都很好啊 把書本上的格式用程式來除錯下 這樣記憶更深刻 scanf f radius printf f n...

簡單的C語言問題求解答,一個簡單的C語言問題求解答

程式輸出為 itis 定義了一個字串陣列ss,其內容為 it is 呼叫函式 fun 傳入陣列的首地址。在fun函式內對字串進行遍歷,直到字串遇到 0 為止,若是英文字母,則複製到原字串的第一個位置,然後再遇到英文字母繼續複製到第二個位置,以此類推,最後加上結束符 0 列印輸出時就會只輸出結束符前面...