Re: [課業] 程設作業
: : data = new int[size]; //動態分配
: ^^^^^ O_Q/有問題 為什麼不是*data ?
簡單講,等號右邊回傳的是memory address,所以直接用data
因為data本身是指標 指標就是拿來存放memery address的
要小心pointer的星號,在不同的地方,有不同的涵義
1.在宣告的時候 int* data; //這裡的星號代表宣告的data是個指標
2.使用的時候 data //這是一個address
*data //提取該address的memory內容
狀況2的星號有「提取」這個動作,而狀況1沒有
所以回到最上頭的例子
(A) int* data = new int[size];
(B) int* data;
data = new int[size];
(A)跟(B)的寫法等價,效果一模一樣,這樣瞭解嗎XD
: 最後要補個delete嗎? 還是說因為我只是想"由輸入個數決定陣列大小"
: 所以以目前為止並不需要去delete它
: 如果真要加delete的話應該要加在哪呢?
: 如果加在 myStack::myStack(){....} 裡的話 好像不行 等於存檔後又刪掉=口=
class除了constructor之外
還有一種叫destructor的東西
函數同class名稱,只是前面多加個小蚯蚓~
class毀滅的前夕,系統會自動呼叫這個函數
myStack::~myStack(){
//通常記憶體釋放會放在這裡面
delete [] data;
}
int main(){
myStack gogo; //這時候會呼叫constructor
.....
...
delete gogo; //這時候就會執行destructor,釋放會在這裡執行
}
照理說有new,就要有delete
所以你這樣思考是好習慣
: 然後 順便想問一下 例如說int* ip = new int[100]
: 和int* array_ptr = new int[100]
: 這兩個是相等意思的嗎? 我看課本7-38看不出來差在哪邊? o_O">
: (更蠢的問題是 一定要用array_ptr嗎? 可以用例如說int* Godknows= new int[100])
當然可以呀
指標也是一種變數 名字可以隨便亂取。
: 問題之多的拉拉Orz
--
「人生有很多個十年,但如果剛好是十八歲到二十八歲,那就是一輩子了。」
「我們常常高估十年後能做的事,卻忽略一年內能做的事」
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.68.15.230
※ 編輯: chchwy 來自: 203.68.15.230 (03/26 00:52)
推
03/26 00:50, , 1F
03/26 00:50, 1F
※ 編輯: chchwy 來自: 203.68.15.230 (04/01 23:58)
討論串 (同標題文章)