請問while(*++p1)是怎麼運算的呢? |
答題得分者是:RaynorPao
|
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
請問各位大大下面程式碼的while(*p1 =*p2 );
是如何運算的,能否請大大詳細解釋一下, 因為這是我第一次看過這種寫法,看不太懂。 -謝謝!謝謝! [code cpp] int main(){ char str1[41]="666666"; char str2[21]="333"; char *p1,*p2; p1=str1-1; while(* p1); //p1指向str1尾部的0 p2=str2; while(*p1 =*p2 ); //str2複製至str1後面 *p1=0; //串接後字串的尾部0 [/code]
------
-謝謝大大熱心的回覆!謝謝! 編輯記錄
l90425 重新編輯於 2008-09-02 12:51:58, 註解 無‧
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
[code cpp]
p1=str1-1; [/code] (1)以上這一行程式碼,先把 p1 指標,指向 str1 字串位址的前一個位址 [code cpp] while(* p1); [/code] (2)以上這一行程式碼,先做 p1=p1 1 的動作,代表 p1 指向 str1 字串的第一個 byte 的位址 (3)前面加星號代表取出這個位址的值,其值是「6」,ASC 值是 0x36,不為 0,因此為 true,所以此 while 迴圈會繼續執行(在 C 語言中,0 值視為 false,非 0 值視為 true) (4)依此類推,直到 p1 指向 str1 字串的結尾 0x00,因此為 false,所以會跳出 while 迴圈 [code cpp] p2=str2; [/code] (5)以上這一行程式碼,先把 p2 指標,指向 str2 字串的第一個 byte 的位址 [code cpp] while(*p1 =*p2 ); [/code] (6)以上這一行程式碼,先把 p2 位址的值 assign 給 p1 位址儲存,而 p1 位址的值是「3」,ASC 值是 0x33,不為 0,因此為 true,所以此 while 迴圈會繼續執行(在 C 語言中,你如果把一個非 0 的值 assign 給一個變數,視為 true;如果把一個 0 的值 assign 給一個變數,視為 false) (7)接著分別把 p1 指向的位址加 1,以及 p2 指向的位址加 1 (8)依此類推,直到 p2 指向 str2 字串的結尾 0x00,因此為 false,所以會跳出 while 迴圈 [code cpp] *p1=0; [/code] (9)以上這一行程式碼,把 p1 垃址的值 assign 為 0x00 (10)其實以上這幾行程式碼,用以下這一行程式碼就可以達到目的,我想可能是有什麼特殊的原因,才會這樣寫的吧? [code cpp] strcat(str1, str2); [/code]
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |