亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 也談指針,指向內(nèi)存大小,指針的大小... [打印本頁]

作者: lemoncookie    時(shí)間: 2010-10-13 22:56
標(biāo)題: 也談指針,指向內(nèi)存大小,指針的大小...
http://www.72891.cn/thread-1796401-1-3.html
原帖中sb與大姨媽齊飛,匆匆翻了一遍,簡直不忍卒讀
有一些算是技術(shù)討論的內(nèi)容又偏題到lvalue和rvalue
還是重新說說吧

這個(gè)問題不搞清,還是少發(fā)點(diǎn)帖子,多看點(diǎn)書的好

首先,原帖作者貼出那段程序,又給了運(yùn)行結(jié)果,我不知道他想說明什么
(順便說一下,那么多空行看得人眼暈)
打印出一堆指針指向的malloc對(duì)象的malloc_usable_size的值
跟指針包含什么內(nèi)容有關(guān)系嗎?
  1.      The malloc_usable_size() function returns the usable size of the alloca-
  2.      tion pointed to by ptr.  The return value may be larger than the size
  3.      that was requested during allocation.
復(fù)制代碼
其次,關(guān)于指針的這些問題,說簡單真的簡單
但要寫出來讓人人都明白,沒有疑議,那就很難了
忽然想到,搜了一下wiki,瀏覽了一下覺得還不錯(cuò),至少內(nèi)容挺豐富全面的,不妨參考一下
http://en.wikipedia.org/wiki/Pointer_%28computing%29
本人斗膽小結(jié)一下,勿噴
指針就是一個(gè)變量,變量最主要的么就是名字,類型和值這幾個(gè)屬性
名字就不用說了
類型就是指針“指向的數(shù)據(jù)類型”的指針
比如指向的數(shù)據(jù)類型是int,那指針類型就是“指向int的指針”
值,就是一個(gè)普通的無符號(hào)整數(shù),這里用來表示地址
說到值,就與指針的大小有關(guān)了,也就是指針本身占用的內(nèi)存
這個(gè)俺也沒興趣去翻標(biāo)準(zhǔn)什么的,只是簡單說在指定的系統(tǒng)上,指針的大小是固定的
x86系統(tǒng)上,C語言指針應(yīng)該是32位
也就是一個(gè)指針占用4個(gè)字節(jié)
關(guān)于指針,也就這么多了

接下來,就是指針指向內(nèi)存的大小了
一般來說指針都指向一個(gè)堆上動(dòng)態(tài)分配的空間
這個(gè)堆上的空間與指針本身一點(diǎn)關(guān)系都沒有
指針只是告訴我們這個(gè)空間的首地址
空間多大,指針是沒有概念的
不信的可以試試申請(qǐng)10個(gè)字節(jié)往里面狂寫
指針照做不誤
只是這樣會(huì)造成堆溢出而已
堆上的內(nèi)存空間一般是由malloc和free管理的
它們?cè)诠芾矶褦?shù)據(jù)的時(shí)候會(huì)有額外的meta data
其中就包括了用戶申請(qǐng)的內(nèi)存的大小
堆數(shù)據(jù)是用鏈表管理的,那么meta data中還包括這些鏈表的指針
詳細(xì)說下去又太復(fù)雜了,要說明的只是堆數(shù)據(jù)是通過其meta data管理的,與指針沒有關(guān)系


灌水結(jié)束
最后表示一下對(duì)某些榮譽(yù)人物的失望
素質(zhì),注意你的素質(zhì)!
作者: lenky0401    時(shí)間: 2010-10-13 23:14
關(guān)于malloc和free 可以參考一下dlmalloc源碼 http://blog.chinaunix.net/u/26524/showart_1946446.html
作者: lemoncookie    時(shí)間: 2010-10-13 23:26
回復(fù) 2# lenky0401

嗯,有心了

原來glibc的malloc也是基于這個(gè)來的
不過給的鏈接也不是源碼阿
還有,既然在cu,文檔怎么也弄個(gè)pdf吧
作者: pmerofc    時(shí)間: 2010-10-14 00:50
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: lemoncookie    時(shí)間: 2010-10-14 08:56
“指針就是一個(gè)變量”
在這個(gè)帖子里有詳細(xì)的討論


至于

我也有同感
歡迎樓主繼續(xù)發(fā)表高見
pmerofc 發(fā)表于 2010-10-14 00:50


嗯,指針是一個(gè)數(shù)據(jù)類型
或者說“指針變量是一個(gè)變量”(不過您不覺得這樣樣說有點(diǎn)傻么?雖然更“正確”)
或者說指針是一種變量,指針是一類變量,不知道是該用“種”好還是“類”好?

個(gè)人覺得要嚴(yán)格區(qū)分的話,每次說到時(shí)都要說明是“指針類型”還是“指針變量”
那這樣寫出來的東西,不要說是網(wǎng)絡(luò)灌水了,就是教科書也會(huì)讓人覺得面目可憎
所以不影響理解文意就可以了
就像Liinux一樣,嚴(yán)格來說只是內(nèi)核,有時(shí)也指系統(tǒng),混著用大家明白就可以了

邪惡的ps:
昨天貼完原帖已經(jīng)發(fā)現(xiàn)這個(gè)問題了,就等著有人揪出來呢
作者: foolishx    時(shí)間: 2010-10-14 09:48
蛋疼……
作者: pmerofc    時(shí)間: 2010-10-14 11:21
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: drangon    時(shí)間: 2010-10-14 12:49
討論這個(gè)復(fù)雜的問題,大家先把下列幾個(gè)概念澄清一下:

指針
指針類型
指針類型的變量
指針類型的值
指針類型的變量的值
地址

大家上面在不同的地方使用”指針“這個(gè)概念時(shí),實(shí)際指的東西是不一樣的。
如果這個(gè)問題不澄清,大家說的不是同一個(gè)的東西,那是怎樣也討論不出一個(gè)有意義的結(jié)果的
作者: pmerofc    時(shí)間: 2010-10-14 13:05
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 論壇ID    時(shí)間: 2010-10-14 15:53
吃火藥拉?我感覺指針就是指針變量,地址不算指針
作者: 狗氣球    時(shí)間: 2010-10-14 16:12
>x86系統(tǒng)上,C語言指針應(yīng)該是32位
>也就是一個(gè)指針占用4個(gè)字節(jié)
這不一定吧。

>一般來說指針都指向一個(gè)堆上動(dòng)態(tài)分配的空間
一般說來不一定。
作者: davelv    時(shí)間: 2010-10-14 16:19
回復(fù) 11# 狗氣球

>x86系統(tǒng)上,C語言指針應(yīng)該是32位
>也就是一個(gè)指針占用4個(gè)字節(jié)
這不一定吧。

恩,標(biāo)準(zhǔn)C沒有規(guī)定指針的值必須是一個(gè)地址來著。
詳情可以參考C:A Reference Manual 5.3.3和6.1
作者: pmerofc    時(shí)間: 2010-10-14 22:05
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: lemoncookie    時(shí)間: 2010-10-14 22:16
>x86系統(tǒng)上,C語言指針應(yīng)該是32位
>也就是一個(gè)指針占用4個(gè)字節(jié)
這不一定吧。

>一般來說指針都指向一個(gè) ...
狗氣球 發(fā)表于 2010-10-14 16:12



嗯,一般說來很少有一定的事,那也麻煩回復(fù)時(shí)看清別人有沒有說一定
另外,您這兩句話說了等于沒說,"那也不一定"可以用來回復(fù)90%的帖子,是吧

其實(shí)我最主要的意思是要說:首帖中引用的那篇帖子的lz給的代碼不能說明指針要包含什么內(nèi)存大小什么的
只想大概解釋一下指針指向堆對(duì)象時(shí)是怎么回事
堆數(shù)據(jù)的管理與指針沒什么關(guān)系,除了釋放的時(shí)候使用指針做了參數(shù)

一時(shí)手賤,多打了幾句關(guān)于指針的廢話
作者: lemoncookie    時(shí)間: 2010-10-14 22:24
&pid
回復(fù)  lemoncookie


    我的看法是,只要是指針類型的表達(dá)式就可以稱之為指針,不管是不是變量
pmerofc 發(fā)表于 2010-10-14 11:21


本不想多事
看到您多次提到這個(gè)論調(diào)
還是問問吧

表達(dá)式是否有類型
本人現(xiàn)存疑
您比較喜歡翻標(biāo)準(zhǔn)翻一個(gè)給俺看看,俺就不去查了

先問一下
  1. short i;
  2. char c;
復(fù)制代碼
那么c+i是什么類型?
我寫
  1. int x = c + i;
  2. char y = c + i;
  3. if ((c+i) ==10)
  4. if ((c+i) > 10.0)
復(fù)制代碼
等等是不是意味著同樣的表達(dá)式有不同的類型?
所以我認(rèn)為類型是變量的屬性
暫存疑吧
作者: lemoncookie    時(shí)間: 2010-10-14 22:28
吃火藥拉?我感覺指針就是指針變量,地址不算指針
論壇ID 發(fā)表于 2010-10-14 15:53



    我覺得ls幾位說的沒什么異常啊
    吃火藥的是誰?
作者: pmerofc    時(shí)間: 2010-10-14 22:40
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: lemoncookie    時(shí)間: 2010-10-14 23:34
回復(fù) 17# pmerofc


    嗯,俺還真蛋疼地去看標(biāo)準(zhǔn)...

    您是對(duì)的,表達(dá)式是有類型,俺也不習(xí)慣從標(biāo)準(zhǔn)的角度去考慮問題
    而且提到表達(dá)式第一感覺也就是變量計(jì)算的所謂復(fù)合表達(dá)式,呵呵

    俺只是覺得表達(dá)式有類型與俺的直覺不符合
    簡單地想,同樣的表達(dá)式可以賦值給不同類型的變量
    那么一個(gè)東西有多個(gè)類型是違背俺直覺的
    事實(shí)上,俺先前的想法是表達(dá)式的結(jié)果是一個(gè)值
    這個(gè)值可以有類型,也可以在賦值時(shí)類型轉(zhuǎn)換
    其實(shí)這個(gè)值的類型就是表達(dá)式的類型,這個(gè)彎很好轉(zhuǎn)

    這與俺根深蒂固的類型是變量的屬性這一想法其實(shí)并不沖突
    表達(dá)式,如果不是一個(gè)變量名的話,如果是那種復(fù)合表達(dá)式的話,我可以理解成一個(gè)匿名變量
作者: pmerofc    時(shí)間: 2010-10-15 08:11
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 論壇ID    時(shí)間: 2010-10-15 08:31
回復(fù) 16# lemoncookie


    你可以去看lz貼出的鏈接
作者: 論壇ID    時(shí)間: 2010-10-15 08:32
回復(fù) 13# pmerofc


    你愣要說地址是指針,我只能說感覺了。畢竟你也可以說譚浩強(qiáng)的書是錯(cuò)的。
作者: pmerofc    時(shí)間: 2010-10-15 09:48
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 論壇ID    時(shí)間: 2010-10-15 10:40
回復(fù) 22# pmerofc


    如果沒記錯(cuò)你說過&i是指針吧? 再如果沒記錯(cuò),&操作符就是取地址的意思吧?那么&i是不是表示i的地址呢?
作者: davelv    時(shí)間: 2010-10-15 10:45
本帖最后由 davelv 于 2010-10-15 10:47 編輯
回復(fù)  pmerofc


    如果沒記錯(cuò)你說過&i是指針吧? 再如果沒記錯(cuò),&操作符就是取地址的意思吧?那么&i ...
論壇ID 發(fā)表于 2010-10-15 10:40


表達(dá)式是有類型的,也是有值的。
如果說它的值是一個(gè)地址,但是它也有類型,例如大多數(shù)情況下,int變量也可以存儲(chǔ)一個(gè)地址,你可以說這個(gè)int變量存儲(chǔ)的是地址,或者它的值是地址,但你不能說這個(gè)int變量是地址。

而且地址這個(gè)東西的格式并不是很通用。
在早期的8086下還有段的概念,段內(nèi)是不能超過64k的。訪問模型是段:偏移.
這時(shí)候不僅僅是地址那么簡單的事情了。
那時(shí)候指針也分near far等等一系列類型。這還只是8086,如果有其他亂七八糟的架構(gòu)就更不用說了。
作者: 論壇ID    時(shí)間: 2010-10-15 10:47
回復(fù) 24# davelv


    當(dāng)然對(duì)于我們來說,只考慮線性地址,物理地址有MMU呢
作者: davelv    時(shí)間: 2010-10-15 10:48
回復(fù) 25# 論壇ID

我更新了下帖子。,~
作者: 論壇ID    時(shí)間: 2010-10-15 10:55
回復(fù) 24# davelv


    沒看明白,那你說&i是不是表示地址,或直接說這是一個(gè)地址,還有個(gè)問題,它是指針嗎?
作者: davelv    時(shí)間: 2010-10-15 11:06
回復(fù)  davelv


    沒看明白,那你說&i是不是表示地址,或直接說這是一個(gè)地址,還有個(gè)問題,它是指針嗎 ...
論壇ID 發(fā)表于 2010-10-15 10:55

可以這么理解,它的值是一個(gè)地址,但是它的類型是指針。
作者: pmerofc    時(shí)間: 2010-10-15 11:08
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: raindy1234    時(shí)間: 2010-10-17 09:00
回復(fù) 10# 論壇ID


    地址可以算個(gè)指針常量吧,,,
作者: iLRainyday    時(shí)間: 2010-10-17 09:25
本帖最后由 iLRainyday 于 2010-10-17 09:31 編輯
我絕對(duì)不會(huì)說“地址是指針”,只可能說指針的值是地址

pointer和address是兩個(gè)概念。pointer是某個(gè)object的reference,屬于一個(gè)high-level的概念,而address是一個(gè)low-level概念,表示內(nèi)存單元的位置。只不過在c語言里,pointer是通過address的方式來實(shí)現(xiàn)對(duì)于object的reference的。

pointer常常通過address實(shí)現(xiàn),但并不是總這樣。在一些企圖撲捉dangling reference的語言中,一個(gè)pointer可能包含了一個(gè)地址和一個(gè)access key.

這兩個(gè)概念在《programming language pragmatics》中,作者scott做過區(qū)分。
作者: pmerofc    時(shí)間: 2010-10-17 09:47
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: iLRainyday    時(shí)間: 2010-10-17 11:20
同意。我認(rèn)為在C語言中  pointer = address + type
    謝謝你提到的書,我去找找


C語言中,pointer就是通過address實(shí)現(xiàn)的吧。pointer肯定有對(duì)應(yīng)的type,不過type的信息顯然沒有存儲(chǔ)在pointer中。
作者: pmerofc    時(shí)間: 2010-10-17 19:30
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 狗氣球    時(shí)間: 2010-10-18 15:51
嗯,一般說來很少有一定的事,那也麻煩回復(fù)時(shí)看清別人有沒有說一定
另外,您這兩句話說了等于沒說, ...
lemoncookie 發(fā)表于 2010-10-14 22:16



    你可以舉例子,那么應(yīng)該說舉例而言。
    不說舉例而言就不合適。

    實(shí)現(xiàn)指針時(shí)是否一定要用4個(gè)字節(jié)的地址。以及系統(tǒng)地址總線字長是否四個(gè)字節(jié)。這是不一定的。
    至于指針指向啥地方,當(dāng)然不一定是堆了。指向棧的、指向靜態(tài)數(shù)據(jù)區(qū)的也很常見。你可以只字不提,但你沒有說你那只是舉個(gè)例子,那我只好跟你說,不一定了。
作者: OwnWaterloo    時(shí)間: 2010-10-18 16:03
回復(fù) 31# iLRainyday

請(qǐng)教一下, programming language pragmatics這本書, 是講C語言的么?
書中的pointer是泛指?

感覺不是指的C語言中的pointer吧?
作者: zhangsuozhu    時(shí)間: 2010-10-18 19:08
TC上的指針  與 GCC 上的指針是不同地。
作者: pmerofc    時(shí)間: 2010-10-19 07:38
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: davelv    時(shí)間: 2010-10-19 09:22
請(qǐng)問差別在何處
pmerofc 發(fā)表于 2010-10-19 07:38


TC是16位程序,生成代碼也是16位代碼。有6中模式tiny,small,medium,compact, larger,huge,3種地址關(guān)鍵字far、near、huge。
以下是抄來的。

      在tiny、small模式下,所有的函數(shù)定義、全局變量定義和指針變量的定義,如果沒有顯示的加上far、near、huge等關(guān)鍵字,都默認(rèn)為使用了near關(guān)鍵字;
      在medium模式下,函數(shù)定義默認(rèn)使用了far關(guān)鍵字,變量定義默認(rèn)使用了near關(guān)鍵字;
      在compact模式下函數(shù)定義模式使用了near關(guān)鍵字,變量定義默認(rèn)使用了far關(guān)鍵字;
      在large模式下函數(shù)定義和變量定義模認(rèn)使用了far關(guān)鍵字;
      在huge模式下函數(shù)定義模認(rèn)使用了far關(guān)鍵字,變量定義默認(rèn)使用了huge關(guān)鍵字。

      near、far、huge關(guān)鍵字的真正含義是什么?這三個(gè)關(guān)鍵字只能用于修飾函數(shù)、全局變量和指針變量,對(duì)于非指針類型的局部變量,這些關(guān)鍵字沒有實(shí)際意義。
      當(dāng)這三個(gè)關(guān)鍵字用于修飾函數(shù)時(shí),huge的含義與far相同,用于指明該函數(shù)的調(diào)用方式為far調(diào)用方式,即調(diào)用時(shí)需要一個(gè)段值和一個(gè)段偏移組成的32bits調(diào)用地址,使用far

call進(jìn)行跳轉(zhuǎn),跳轉(zhuǎn)前先壓棧保存當(dāng)前CS:IP。near修飾函數(shù)時(shí),用于指明該函數(shù)的調(diào)用方式為near調(diào)用方式,調(diào)用時(shí)先壓棧保存當(dāng)前IP,需要一個(gè)16bits的近地址,即當(dāng)前CS的段

內(nèi)偏移。

      當(dāng)這三個(gè)關(guān)鍵字用于修飾指針時(shí),near型指針實(shí)質(zhì)上為16bits的無符號(hào)整型數(shù),該整數(shù)給出了所指向變量在當(dāng)前數(shù)據(jù)段內(nèi)的偏移地址,也就是說,在使用near型指針尋址時(shí)

實(shí)際上是進(jìn)行如下的尋址操作:[DS:指針變量值]。對(duì)于far型的指針變量,可以尋址1MB地址空間的任意一個(gè)地方,far型指針的實(shí)質(zhì)是一個(gè)32bits的整型數(shù),高16bits為段值,低

16bits為段內(nèi)偏移,Turbo C中在使用far型指針時(shí),會(huì)先將高16bits放入ES寄存器中,然后再進(jìn)行如下的尋址操作:[ES:指針變量低16bits值]。對(duì)于hug型的指針變量,與far型指

針變量的不同之處在于,在對(duì)far型指針變量進(jìn)行+/++/-/--等操作時(shí),far型指針變量保持段值不變(也就是高16bits),而只對(duì)段內(nèi)偏移進(jìn)行加減操作,所以會(huì)出現(xiàn)段內(nèi)回繞的現(xiàn)

象,而huge型的指針,在進(jìn)行加減操作時(shí)將會(huì)自動(dòng)的改變段值,不會(huì)出現(xiàn)段內(nèi)回繞。所以給人的感覺就是huge指針能比far指針尋址更大的內(nèi)存空間。

      對(duì)于局部變量,由于是創(chuàng)建在堆棧上,所以near、far等關(guān)鍵字將不具備任何意義,因?yàn)閯?chuàng)建在堆棧上的變量的尋址方式就只有一種,即使用sp和bp維護(hù)函數(shù)堆棧,利用

bp+/-一個(gè)偏移來尋址函數(shù)參數(shù)變量和局部變量。這樣的尋址方式是固定而唯一的,near和far等關(guān)鍵字都派不上用場,這里的near和far將沒有任何的實(shí)際含義。

      對(duì)于使用near、far和huge修飾的全局變量的含義也很容易理解了。near型的全局變量,被分配到了當(dāng)前的數(shù)據(jù)段上,尋址這個(gè)變量只需要一個(gè)16bits的偏移量,而far型全

局變量在尋址時(shí),需要給出段值和偏移量。huge型數(shù)組可以使用大于64K的內(nèi)存空間。

      far、near、huge型指針變量之間的相互轉(zhuǎn)換,從小尺寸的指針到大尺寸的指針將進(jìn)行自動(dòng)的類型轉(zhuǎn)換,轉(zhuǎn)換方式為加上當(dāng)前的DS形成32bits的指針。從大尺寸的指針到小尺

寸的指針需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,轉(zhuǎn)換的結(jié)果為只保留低16bits,但是這樣俄轉(zhuǎn)換沒有實(shí)際的意義或者說用處不大,并且極其容易引入內(nèi)存訪問的錯(cuò)誤,所以要嚴(yán)格避免使用。
作者: pmerofc    時(shí)間: 2010-10-19 09:27
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: davelv    時(shí)間: 2010-10-19 09:32
回復(fù)  davelv


    謝謝!
    我還以為37樓所說的“不同”是指的別的什么方面呢
pmerofc 發(fā)表于 2010-10-19 09:27


x86 的32位平坦模式下,指針簡潔多了。不像實(shí)模式下的又是偏移又是段的~
作者: pmerofc    時(shí)間: 2010-10-19 09:36
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: davelv    時(shí)間: 2010-10-19 09:41
是的,但在C代碼的層面基本是感覺不到的(除了那個(gè)far)
pmerofc 發(fā)表于 2010-10-19 09:36


可以感覺得到,例如你near指針不能分配超過64K的內(nèi)存,near和far指針不能直接轉(zhuǎn)換等等。
畢竟C語言和平臺(tái)本身有很大的聯(lián)系,雖然不能怪到C語言頭上,但畢竟是通過C和系統(tǒng)交互,所以還是能感覺到的。
作者: 小林多喜三10    時(shí)間: 2010-10-19 09:43
指針和變量是兩個(gè)概念,指針是一個(gè)地址而已。。。你可以定義一個(gè)指針變量,但不能說指針就是變量
作者: pmerofc    時(shí)間: 2010-10-19 09:51
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: davelv    時(shí)間: 2010-10-19 10:12
回復(fù)  davelv


    你的意思我懂,但我絕對(duì)不會(huì)象你那么說
pmerofc 發(fā)表于 2010-10-19 09:51

恩,交流么,不能保證自己句句嚴(yán)格,除非引起了爭議情況下,一般都按照通常理解來。
不過我覺得C作為一門操作系統(tǒng)級(jí)別的開發(fā)語言,不能完全隔離硬件和系統(tǒng)平臺(tái)去看待,做業(yè)務(wù)都要聯(lián)系實(shí)際。
雖然語法是語法,業(yè)務(wù)是業(yè)務(wù),但是脫離的業(yè)務(wù),語法也就沒有存在的意義。
作者: iLRainyday    時(shí)間: 2010-10-19 19:02
本帖最后由 iLRainyday 于 2010-10-19 19:05 編輯

回復(fù) 36# OwnWaterloo

這本書不是專講C語言的。我說的那段話是來自"type system"這一章中pointers and recursive types這一節(jié),不是特指C中的pointer。
作者: chinesedragon    時(shí)間: 2010-10-20 17:49
首先,指針就是地址這個(gè)概念是不對(duì)的
作者: 璦的思念    時(shí)間: 2010-10-20 19:33
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 幻の上帝    時(shí)間: 2010-10-20 20:04
C99:
The unary & operator returns the address of its operand. If the operand has type ‘‘type’’, the result has type ‘‘pointer to type’’.
C++03:
The result of the unary & operator is a pointer to its operand.
有些微妙的區(qū)別。。
作者: pmerofc    時(shí)間: 2010-10-20 20:20
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: pmerofc    時(shí)間: 2010-10-20 21:07
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 幻の上帝    時(shí)間: 2010-10-21 11:51
從手頭上的pdf里面的原文復(fù)制的……
6.5.3.2 Address and indirection operators
Semantics
3 The unary & operator returns the address of its operand. If the operand has type ‘‘type’’,
the result has type ‘‘pointer to type’’. If the operand is the result of a unary * operator,
neither that operator nor the & operator is evaluated and the result is as if both were
omitted, except that the constraints on the operators still apply and the result is not an
lvalue. Similarly, if the operand is the result of a [] operator, neither the & operator nor the unary * that is implied by the [] is evaluated and the result is as if the & operator
were removed and the [] operator were changed to a + operator. Otherwise, the result is
a pointer to the object or function designated by its operand.
文件版本問題?
作者: pmerofc    時(shí)間: 2010-10-21 16:46
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 幻の上帝    時(shí)間: 2010-10-23 12:17
回復(fù) 54# pmerofc

果然和版本有關(guān)...
謝謝提醒。
作者: sui_yuan    時(shí)間: 2012-05-12 20:54
地址就是一個(gè)值,指針就是存放這個(gè)值的并通過這個(gè)值找到相應(yīng)的內(nèi)存的,指針中應(yīng)該還包括一些位用于指示指針變量的類型   至于指針指向malloc()申請(qǐng)的內(nèi)存塊的size應(yīng)該存放在別的地方吧~~~~~~~




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2