已采納回答 / onemoo
函數(shù)本身代碼的地址并不在棧中,它們在代碼段中。函數(shù)調(diào)用時才會將參數(shù)和各種用到的變量以棧幀結(jié)構(gòu)存在棧中,這會使棧依照調(diào)用順序來增長。所以參數(shù)的壓棧地址可以說明它們的調(diào)用順序。
2015-09-16
已采納回答 / onemoo
str2="world" 這樣并不是把world這幾個字符復(fù)制到str2所指的區(qū)域,字符串字面量做右值時會轉(zhuǎn)換為指向首字符的指針,所以這語句是把str2指向“world”這個字符串所在的位置。需要復(fù)制字符串應(yīng)使用LS說的strcpy函數(shù)。一般程序會把字符串字面量放到只讀數(shù)據(jù)段中(無法被修改),所以后續(xù)通過str2來修改這些內(nèi)容會引起"段錯誤"。你代碼的另一個問題是,在你給str2第二次賦值后就丟掉了前一次分配的指針,導(dǎo)致無法回收那段內(nèi)存,引起內(nèi)存泄漏。
2015-09-02
已采納回答 / onemoo
str 比 str2 高 0x40-0x38 = 8字節(jié),str占用6個字節(jié),可以容納開。str3 比 str 高 0x50-0x40 = 16字節(jié),str3占用10個字節(jié),也可以容乃開。一般變量的地址起始要求是2或4的倍數(shù),所以為了對齊,變量之間會有額外的空當。
2015-08-09
已采納回答 / onemoo
這是函數(shù)指針聲明。這是將pquadrate聲明為函數(shù)指針,它指向的是有一個int型參數(shù),返回值為int的函數(shù)。這語句同時將pquadrate初始化為quadrate的地址(顯然quadrate應(yīng)該是個函數(shù)名)。一步一步講這個聲明:這語句聲明的是pquadrate變量,前面有個*,而且是用小括號和變量名括起來的(*pquadrate),表明這個變量名優(yōu)先和*結(jié)合。聲明變量時前面有*就代表這個變量是指針,所以pquadrate是個指針。那它指向什么呢?接著看,后面有小括號,前面有類型,表明是個函數(shù)。參數(shù)就是i...
2015-07-28
已采納回答 / noming
棧在程序的運行中有著舉足輕重的作用。最重要的是棧保存了一個函數(shù)調(diào)用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。堆棧幀一般包含如下幾方面的信息:1.函數(shù)的返回地址和參數(shù)2. 臨時變量:包括函數(shù)的非靜態(tài)局部變量以及編譯器自動生成的其他臨時變量。首先你要知道,由于外部環(huán)境變化,某些函數(shù)每一次執(zhí)行都會返回不同的結(jié)果。最典型的就是取隨機數(shù)函數(shù)了而棧里面存著的就是這些東西。所以,每一個線程都會得到不同的結(jié)果,每一個線程也都需要一個存著這個結(jié)果的棧!
2015-06-06