[問題] 關於指標函數

看板C_and_CPP作者 (Jun)時間13年前 (2010/11/14 10:36), 編輯推噓2(2017)
留言19則, 4人參與, 最新討論串1/2 (看更多)
想請教一下各位大大,最近在看一本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

11/14 11:43, , 1F
指標有那麼難嗎XD
11/14 11:43, 1F

11/14 11:48, , 2F
因為剛學所以對於C的一些語法不是很了解
11/14 11:48, 2F

11/14 11:51, , 3F
所以想請教板上的各位高手~
11/14 11:51, 3F

11/14 12:34, , 4F
觀念有點問題, left就是個函數, 不會有left=p的內容發生
11/14 12:34, 4F

11/14 12:35, , 5F
不要管指標, 尤其是什麼"字串內容"這件事, 先記得一件事
11/14 12:35, 5F

11/14 12:36, , 6F
left是個func, 回傳一個變數, 如同回傳int, double等的
11/14 12:36, 6F

11/14 12:36, , 7F
func一樣, 只是它回傳的是一個指標變數.
11/14 12:36, 7F

11/14 12:37, , 8F
如果left裡p new出來的空間在 0x10000000 (佔n byte先不
11/14 12:37, 8F

11/14 12:38, , 9F
管), 那麼left就只是把p記錄的值(0x10000000)回傳到main
11/14 12:38, 9F

11/14 12:38, , 10F
讓你的ps變數接著(以本例來說), 所以ps值在執行完該行以
11/14 12:38, 10F

11/14 12:39, , 11F
後就成為了0x10000000. 近似於做了ps=p; (當然code是不
11/14 12:39, 11F

11/14 12:39, , 12F
能這麼寫!!)
11/14 12:39, 12F

11/14 12:41, , 13F
至於0x10000000存什麼資料, 因為你left()裡是定成char[]
11/14 12:41, 13F

11/14 12:41, , 14F
型態並存入了字串資料, 所以內容是字串. 把語言的不同元
11/14 12:41, 14F

11/14 12:42, , 15F
素分開來理解再組合起來, 看看會不會比較容易懂@_@"
11/14 12:42, 15F

11/14 14:18, , 16F
謝謝vict大大,我大概了解了,版上的好人真的很多
11/14 14:18, 16F

11/14 14:19, , 17F
不過我想問一下,一般來講指標函數是不是很少用到?
11/14 14:19, 17F

11/14 14:19, , 18F
有什麼例子是一定要用到指標函數的嗎?
11/14 14:19, 18F

11/14 14:42, , 19F
這個叫做 a function returns a pointer
11/14 14:42, 19F
文章代碼(AID): #1CtqiShb (C_and_CPP)
文章代碼(AID): #1CtqiShb (C_and_CPP)