我在這裏問一個問題:C++ - class issueC++ - 指針函數參數
什麼我還沒有得到的是指針參數在這裏:
void setInfo(char *strName,int id,double wage)
當它被稱爲:
abder.setInfo("Abder-Rahman",123,400);
我知道該數組的名稱是一個指針。但是,爲什麼我們必須有一個指針數據類型?我們不能在函數參數列表中使用char[]
嗎?正如我認爲當我嘗試時發生錯誤。
謝謝。
我在這裏問一個問題:C++ - class issueC++ - 指針函數參數
什麼我還沒有得到的是指針參數在這裏:
void setInfo(char *strName,int id,double wage)
當它被稱爲:
abder.setInfo("Abder-Rahman",123,400);
我知道該數組的名稱是一個指針。但是,爲什麼我們必須有一個指針數據類型?我們不能在函數參數列表中使用char[]
嗎?正如我認爲當我嘗試時發生錯誤。
謝謝。
但是,爲什麼我們必須有一個指針數據類型?
因爲編譯函數時需要知道函數參數的大小。即該函數需要知道內存中的參數列表有多遠才能找到id
和wage
。
我們不能在函數參數列表中使用char []嗎?
是的,你可以,但它仍然通過指針傳遞。在被調用的函數內部保留了數據作爲數組的一部分的附加屬性(例如返回數組總大小的sizeof()
)。在函數簽名中使用[]
的能力僅僅是一個指示器,通過的項目應該是某種類型的數組(而不是指向結構的指針)。
感謝您的回覆。當我試圖在函數簽名中使用[]時,像這樣:「char [] strName」我得到一個錯誤。我應該如何將它作爲參數編寫?謝謝。 – Simplicity 2011-01-23 15:50:23
@SWEngineer:「錯誤」非常「特定」:)什麼是實際的錯誤信息?此外,它應該是`char strName []`不`char [] strName` :) – 2011-01-23 19:57:05
char []也是一個指針。是的,你可以使用它。
只作爲函數參數的聲明,否則`char []`是一個不完整的數組類型。 – 2011-01-23 10:44:13
爲真。我不喜歡它,我更喜歡* :) – 2011-01-23 11:17:53
數組和指針有很大關係 - 你甚至可以用一個指針像數組一樣
void foo(char *ptr) {
ptr[2] = 'x';
}
在你的情況,你會得到,因爲字面字符串編譯錯誤(或警告)(如"foo"
)被認爲是const的,也就是說它們可能不會被修改,並且由於沒有使用const指針的函數沒有作出承諾而不改變它,所以編譯器拒絕將它交給字符串文字。
你需要做
void setInfo(const char *strName,int id,double wage)
一般情況下,你應該總是使用const
的指針和引用參數,除非你打算修改的對象。
你需要自己寫一本好書。這是目前學習C++最好的獨奏方式。 http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – 2011-01-23 10:32:48