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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1426 | 回復: 5
打印 上一主題 下一主題

關(guān)于棧的問題 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2006-09-02 10:47 |只看該作者 |倒序瀏覽

  1. #include <stdio.h>

  2. int * ptr;

  3. void change(void) {

  4.         int i = 100;

  5.         ptr = &i;

  6. }

  7. void show(void) {

  8.         int j = 250;

  9.         printf("%d\n", *ptr);

  10. }

  11. int main(void) {

  12.         change();
  13.         show();

  14. }
復制代碼


這段代碼的輸出結(jié)果為250,為什么?
我的猜想是,ptr指向了堆棧的頂部(或底部),也就是所有函數(shù)的第一個變量的內(nèi)存位置。

[ 本帖最后由 iwinux 于 2006-9-2 12:02 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2006-09-02 10:55 |只看該作者
不是的,只是恰巧j的位置是之前i的位置。
void show(int i) {

        int j = 250;

        printf("%d\n", *ptr);

}
就不一樣了

論壇徽章:
0
3 [報告]
發(fā)表于 2006-09-02 12:01 |只看該作者

  1. void show(int i) {

  2.         int j = 250;

  3.         printf("%d\n", *ptr);

  4. }
復制代碼


是 i 先入棧還是 j 先入棧?

論壇徽章:
0
4 [報告]
發(fā)表于 2006-09-02 14:25 |只看該作者
原帖由 iwinux 于 2006-9-2 12:01 發(fā)表

  1. void show(int i) {

  2.         int j = 250;

  3.         printf("%d\n", *ptr);

  4. }
復制代碼


是 i 先入棧還是 j 先入棧?


應(yīng)該是 i 先入棧。j 在棧上創(chuàng)建。

論壇徽章:
0
5 [報告]
發(fā)表于 2006-09-02 15:22 |只看該作者
原帖由 iwinux 于 2006-9-2 12:01 發(fā)表

  1. void show(int i) {

  2.         int j = 250;

  3.         printf("%d\n", *ptr);

  4. }
復制代碼


是 i 先入棧還是 j 先入棧?


兩個變量本來就在不同的棧幀(stack frame)上,i在caller(main)的棧幀上,j在callee(show)的棧幀上。
看看匯編代碼就知道了。

論壇徽章:
0
6 [報告]
發(fā)表于 2006-09-02 20:56 |只看該作者
提這個問題主要是因為我在《程序員2003合訂本》里看到一段無限循環(huán)的程序,前幾天剛剛看懂,今天拿來試驗了一下。
程序大概是這樣的:

  1. #include <stdio.h>

  2. int ptr;

  3. void addr(void) {

  4.         int i = 0;

  5.         ptr = &i;
  6. }

  7. void loop(void){

  8.         int i;

  9.         for (i = 0; i < 10; i++)
  10.                 (*ptr)--;                //這里其實修改了i的值,所以導致無限循環(huán)

  11. }

  12. int main(void) {

  13.         addr();
  14.         loop();

  15.         return 0;    //永遠不會執(zhí)行

  16. }
復制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP