PALMisLIFE 討論區

搜索
鹹魚爸魅力四射舞蹈教室
查看: 1368|回復: 4
打印 上一主題 下一主題

[求助] 一個 C 語言程式中的片段不懂!(懂了!謝謝幫忙!^O^)

[複製鏈接]

313

主題

22

好友

7358

積分

  • TA的每日心情
    無聊
    2011-4-27 21:18
  • 簽到天數: 3 天

    連續簽到: 1 天

    [LV.2]偶爾看看I

    文章
    7076
    跳轉到指定樓層
    1#
    發表於 2003-9-13 19:34 |只看該作者 |倒序瀏覽
    #include <stdio.h>

    main()
    {
        char s[] = "I love cat and dog.";
        char c = 'a';
        char *p = s;
        int n = 0;
       
        printf("從\" %s \"之中,搜尋\' %c \'\n", s, c );
        while ( *p != '\0' ){
            if ( *p == c ){
                    printf("在第%d個字元處發現了。 \n", p-s+1);
                    n++;
                    }
            p++;
        }
        if ( n == 0 )
            printf("沒有找到任何字元。 \n";
        else
            printf("全部共發現%d個。 \n";
       

        system("PAUSE";
        return 0;
    }

    -------------------分隔線工作中--------------------------
    我用的程式是「Bloodshed Dev-C++ 」Version 4.9.8.0,
    上面藍字部分是程式碼紅字加底線部分是我不懂的地方,
    p 是指向 s 的位址,我用 debug 去看「p-s+1」,
    「p-s+1」每執行一次就會加 1 ,
    而在 debug 中,看 p 和 s 的值,
    「p-s」在第一個字元是 0 ;在第二個字元是 1 .....(以此類推),
    每個加上 1 後就是所在字元的個數。
    所以可以指出字串中為「a」的字元,及「a」在第幾個字元,
    但是,為什麼用「p-s+1」可以指出?這一部份我看不懂。

    上面就是我所理解的,不知道說得清不清楚?
    請大家多幫忙!謝謝!
    分享淘帖0 分享分享0 收藏收藏0 頂0 踩0
    <!-- Plurk Badge START --><a href="http://www.plurk.com/nateyoung/invite/4" target="_top"><img src="http://images.plurk.com/image_avatar_3425926_h.png" border="0" /></a><!-- Plurk Badge END -->

    45

    主題

    0

    好友

    466

    積分

    該用戶從未簽到

    文章
    302
    2#
    發表於 2003-9-13 20:50 |只看該作者
    s是放開頭第一個字元「I」的位址
    p一開始也是指向s
    假設位址是1000

    現在要找「a」,p會+8次,所以p會變成1008
    因此a就是p-s+1就是1008-1000+1=9,第9個字元

    不曉得是不是這樣~~
    太久沒寫C啦@@
    回復

    使用道具 舉報

    130

    主題

    0

    好友

    1119

    積分

    該用戶從未簽到

    文章
    1738
    3#
    發表於 2003-9-14 01:09 |只看該作者

    Re: [求助]一個C語言程式中的片段不懂!

    沒錯囉,就是Devon說的那樣啦。
    p跟s都是pointer,而在你畫紅線的地方,有個while Loop
    每次loop,p位置都會+1,就是往後一個字元的意思
    所以p-s+1就是Devon說的,在算位置囉...
    回復

    使用道具 舉報

    396

    主題

    0

    好友

    1453

    積分

       

    該用戶從未簽到

    文章
    3487
    4#
    發表於 2003-9-14 06:00 |只看該作者

    Re: [求助]一個C語言程式中的片段不懂!

    s[]是一個陣列,而s是存此陣列的的第一個位址...
    *p是一個指標,p中所存的值等於s...
    所以可以說*p等於s[]

    應該是這樣吧? 我也好幾年沒寫C了
    回復

    使用道具 舉報

    313

    主題

    22

    好友

    7358

    積分

  • TA的每日心情
    無聊
    2011-4-27 21:18
  • 簽到天數: 3 天

    連續簽到: 1 天

    [LV.2]偶爾看看I

    文章
    7076
    5#
    發表於 2003-9-14 09:34 |只看該作者
    謝謝!
    我懂了!
    就是卡在前面三位所說的地方,
    仔細想想,我應該懂的!^^||
    卻被這地方卡了好幾天!

    感謝 Devon 、毒舌痞子 及 guruguru 三位!^O^
    <!-- Plurk Badge START --><a href="http://www.plurk.com/nateyoung/invite/4" target="_top"><img src="http://images.plurk.com/image_avatar_3425926_h.png" border="0" /></a><!-- Plurk Badge END -->
    回復

    使用道具 舉報

    您需要登錄後才可以回帖 登錄 | 免費註冊

    與站長聯繫| PALMisLIFE 掌上生活      下載:更快、更棒、更好玩

    GMT+8, 2024-12-24 10:31 , Processed in 0.031563 second(s), 30 queries , Gzip On.

    Powered by Discuz!

    © 2001-2012 Comsenz Inc. style by eisdl

    回頂部