作者Blueshiva (龍野南雲)
看板MacDev
標題Re: [問題] 傳陣列指標
時間Fri Jan 10 07:21:20 2014
要不是你抄錯,就是原文就有錯...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