PALMisLIFE 討論區

標題: [求助] 一個 C 語言程式中的片段不懂!(懂了!謝謝幫忙!^O^) [列印本頁]

作者: bm2000    時間: 2003-9-13 19:34
標題: [求助] 一個 C 語言程式中的片段不懂!(懂了!謝謝幫忙!^O^)
#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」可以指出?這一部份我看不懂。

上面就是我所理解的,不知道說得清不清楚?
請大家多幫忙!謝謝!
作者: Devon    時間: 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啦@@
作者: 毒舌痞子    時間: 2003-9-14 01:09
標題: Re: [求助]一個C語言程式中的片段不懂!
沒錯囉,就是Devon說的那樣啦。
p跟s都是pointer,而在你畫紅線的地方,有個while Loop
每次loop,p位置都會+1,就是往後一個字元的意思
所以p-s+1就是Devon說的,在算位置囉...
作者: guruguru    時間: 2003-9-14 06:00
標題: Re: [求助]一個C語言程式中的片段不懂!
s[]是一個陣列,而s是存此陣列的的第一個位址...
*p是一個指標,p中所存的值等於s...
所以可以說*p等於s[]

應該是這樣吧? 我也好幾年沒寫C了
作者: bm2000    時間: 2003-9-14 09:34
謝謝!
我懂了!
就是卡在前面三位所說的地方,
仔細想想,我應該懂的!^^||
卻被這地方卡了好幾天!

感謝 Devon 、毒舌痞子 及 guruguru 三位!^O^




歡迎光臨 PALMisLIFE 討論區 (http://f.pil.tw/) Powered by Discuz! X2.5