看板 C_and_CPP 關於我們 聯絡資訊
想請教一下各位大大,最近在看一本C++的書,對於指標函數有點不是很了解, 下面的程式中char *left(const char * str, int n) 這函數是代表回傳一個指標, P是NEW出來的東西,然後main()函數中char *ps = left(sample, 4)這行可以解釋 成 left=p指向的內容字串 ,然後ps再指向left=p指向的內容字串嗎?對於指標函數 似乎又把我搞混了~~~如果有哪位大大能詳細解釋那是更好了! #include<iostream> using namespace std; const int ArSize = 80; char * left(const char * str, int n = 1); int main(void) { char sample[ArSize]; cout << "Enter a string:\n"; cin.get(sample,ArSize); char *ps = left(sample, 4); cout << ps << "\n"; delete [] ps; ps = left(sample); cout << ps << "\n"; system("PAUSE"); return 0; } char *left(const char * str, int n) { int i; if(n < 0) n = 0; char * p = new char[n+1]; for (i = 0; i < n && str[i]; i++) p[i] = str[i]; while (i <= n) p[i++] = '\0'; return p; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.214.36
stupid0319:指標有那麼難嗎XD 11/14 11:43
vm6jp6rmp4:因為剛學所以對於C的一些語法不是很了解 11/14 11:48
vm6jp6rmp4:所以想請教板上的各位高手~ 11/14 11:51
VictorTom:觀念有點問題, left就是個函數, 不會有left=p的內容發生 11/14 12:34
VictorTom:不要管指標, 尤其是什麼"字串內容"這件事, 先記得一件事 11/14 12:35
VictorTom:left是個func, 回傳一個變數, 如同回傳int, double等的 11/14 12:36
VictorTom:func一樣, 只是它回傳的是一個指標變數. 11/14 12:36
VictorTom:如果left裡p new出來的空間在 0x10000000 (佔n byte先不 11/14 12:37
VictorTom:管), 那麼left就只是把p記錄的值(0x10000000)回傳到main 11/14 12:38
VictorTom:讓你的ps變數接著(以本例來說), 所以ps值在執行完該行以 11/14 12:38
VictorTom:後就成為了0x10000000. 近似於做了ps=p; (當然code是不 11/14 12:39
VictorTom:能這麼寫!!) 11/14 12:39
VictorTom:至於0x10000000存什麼資料, 因為你left()裡是定成char[] 11/14 12:41
VictorTom:型態並存入了字串資料, 所以內容是字串. 把語言的不同元 11/14 12:41
VictorTom:素分開來理解再組合起來, 看看會不會比較容易懂@_@" 11/14 12:42
vm6jp6rmp4:謝謝vict大大,我大概了解了,版上的好人真的很多 11/14 14:18
vm6jp6rmp4:不過我想問一下,一般來講指標函數是不是很少用到? 11/14 14:19
vm6jp6rmp4:有什麼例子是一定要用到指標函數的嗎? 11/14 14:19
loveme00835:這個叫做 a function returns a pointer 11/14 14:42