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