看板 MacDev 關於我們 聯絡資訊
要不是你抄錯,就是原文就有錯...XDD ※ 引述《ishuen (盧小小)》之銘言: : 大家好,我在書上看到一段程式不太了解 : void copyString(char *to, char *from) : { : for ( ; *from = '\0'; ++from, ++to) ^^這應該是 != 才會動 這個徊圈做的事是,沒有初始東西,等到 *from 不是 \0 的時候就停下來 然後每次都把 from 和 to 指標移動一個 : *to = *from 然後指定把 from 指到的字元複製到 to 去 : *to = '\0'; 最後把 to 結尾填上 \0 作結尾 : } : int main (int argc, char * argv[]) : { : @autoreleasepool{ : char string1[] = "A string to be copied."; : char string2[50]; : copyString(string2, string1); : NSLog(@"%s",string2); : } : return 0; : } : 我想問在main裡面 : 傳了兩個character string給copyString : 書上說實際上是傳了兩個string的pointer過去 : 可是copyString的參數pointer : 不是只能指向character string裡的某個字嗎? : 像是char from = string1[0]; : 但是為什麼這兩個pointer可以用來代表兩個string? 要注意的是,這邊是宣告了 char 陣列,不是 NSString 字串,所以整個都是 C 的 想法。string1 這個變數是個指向某個char陣列頭的指標,但是你直接 *string1 的話 取到的值就是 string1[0] 的 char。配合copyString這個function,整件事情就是 把兩個陣列頭的指標丟進去,然後把指標每次移動1個位置,複製資料,檢查是不是 到了string1的結尾(\0),是的話就把string2也結束(把\0接到尾巴) 其實這整段都是C... -- Luna quieres ser madre y no encuentras querer que te haga mujer -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.125.216
ishuen:抱歉少打字了 所以傳兩個陣列給function的話實際上是傳兩個 01/10 07:42
ishuen:分別指向各自陣列頭的指標進去的意思嗎? 01/10 07:43
Blueshiva:應該說,代表陣列的變數,本身就是個陣列中元件的指標 01/10 08:22
Blueshiva:指到的位置是陣列中第一個元素的位置 01/10 08:23
uranusjr:這整段唯一不是 C 的只有 @autoreleasepool XD 01/10 13:50
ishuen:好像寫錯了 等到*from "是" \0的時候就停下來 01/10 15:02
ishuen:不是\0的話就繼續跑 應該是這樣 01/10 15:04
Blueshiva:for的第二個區塊是true的時候就會繼續,所以 *from!=\0 01/10 17:02
Blueshiva:會在*from是\0的時候停下來沒錯 01/10 17:03
ishuen:可是版主上面寫"不是" 寫錯了XD 01/10 17:41
Blueshiva:你原來po的時候for條件寫成*from = '\0',這根本不是比 01/11 08:15
Blueshiva:較運算,一定是錯的啊,所以我後面有更正應該怎麼寫才對 01/11 08:15
ishuen:喔 是這樣 我懂了 01/11 08:46