Re: [問題] 傳陣列指標

看板MacDev作者 (龍野南雲)時間10年前 (2014/01/10 07:21), 編輯推噓3(3010)
留言13則, 3人參與, 最新討論串2/3 (看更多)
要不是你抄錯,就是原文就有錯...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

01/10 07:42, , 1F
抱歉少打字了 所以傳兩個陣列給function的話實際上是傳兩個
01/10 07:42, 1F

01/10 07:43, , 2F
分別指向各自陣列頭的指標進去的意思嗎?
01/10 07:43, 2F

01/10 08:22, , 3F
應該說,代表陣列的變數,本身就是個陣列中元件的指標
01/10 08:22, 3F

01/10 08:23, , 4F
指到的位置是陣列中第一個元素的位置
01/10 08:23, 4F

01/10 13:50, , 5F
這整段唯一不是 C 的只有 @autoreleasepool XD
01/10 13:50, 5F

01/10 15:02, , 6F
好像寫錯了 等到*from "是" \0的時候就停下來
01/10 15:02, 6F

01/10 15:04, , 7F
不是\0的話就繼續跑 應該是這樣
01/10 15:04, 7F

01/10 17:02, , 8F
for的第二個區塊是true的時候就會繼續,所以 *from!=\0
01/10 17:02, 8F

01/10 17:03, , 9F
會在*from是\0的時候停下來沒錯
01/10 17:03, 9F

01/10 17:41, , 10F
可是版主上面寫"不是" 寫錯了XD
01/10 17:41, 10F

01/11 08:15, , 11F
你原來po的時候for條件寫成*from = '\0',這根本不是比
01/11 08:15, 11F

01/11 08:15, , 12F
較運算,一定是錯的啊,所以我後面有更正應該怎麼寫才對
01/11 08:15, 12F

01/11 08:46, , 13F
喔 是這樣 我懂了
01/11 08:46, 13F
文章代碼(AID): #1Ipoxqvt (MacDev)
文章代碼(AID): #1Ipoxqvt (MacDev)