作者chchwy (mat)
看板NTUE-CS100
标题Re: [课业] 程设作业
时间Wed Mar 26 00:47:28 2008
: : 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)
1F:推 gingkoginkgo:大感谢!<(_ _)>(泣) 03/26 00:50
※ 编辑: chchwy 来自: 203.68.15.230 (04/01 23:58)