在 Day 10有大規模改動,大家可以去看看,講的是變數同步
那好吧,在談指針資料結構之前,我先講一下指針的優缺點
對 現代C++而言
缺點
對 C 而言(這個欄目是給想在學完C++後學C/Go的邦友看的)
缺點
int *(*ptr[10])(int*);
理解了指針的好壞,那麼下一步就建立一個指針吧
因為指針改動比較多,那麼我羅列五種建立方式,讓不同版本的人都可以用
auto number1 = make_unique<double>(3.5);
auto number2 = make_shared<double>(9.2);
include<memory>
類型 | 變數 | Pointer |
---|---|---|
數值 | var |
*var |
地址 | &var |
var |
這個表概括了3個重點
auto number1 = make_unique<double>(3.5);
cout << *number1 << endl;
cout << "這是地址 " << number1 << " 不是數值。"<< endl;
//例子1
auto number1 = make_shared<double>(3.5);
auto number2 = make_shared<double>(4.7);
number1 = number2;
*number2 = 1.1;
//例子2
auto number3 = 3;
auto number4 = make_shared<int>(645);
&number3 = number4;
你可以將指針 的number1
看成普通變數的&number1
number1
和 number 2
成功同步,number1
和number2
變成3.5,最後變成1.1
number3
和number4
成功同步,兩者現在是645,注意 &number3
和 number4
意思是一樣的
make_unqiue
建立出來的Pointer無法使用變數同步功能以換取速度,但如果不需要同步,可以看下面兩個方法
//例子1
auto number1 = make_unique<double>(3.5);
auto number2 = make_unique<double>(4.7);
*number1 = *number2;
*number2 = 1.1;
//例子2
auto number3 = 3;
auto number4 = make_shared<int>(645);
number3 = *number4;
*number1
看成普通變數的number1
*number2
最後變成1.1,但*number1
最後並沒有跟著改變,而是4.7auto number1 = make_unique<double>(3.5);
auto number2 = make_unique<double>(4.7);
number2 = move(number1);
//number1 變成了空(nullptr)了
//number2獲取number1的所有屬性
//這時輸出*number1會出錯
cout << *number1 << endl;
Pointer與函數的交互是這樣
auto addPtr(auto &a){
*a = *a + 1;
}
int main(){
auto b = make_unique<double>(3.5);
addPtr(b);
return 0;
}
&
的意思在這裡依然是可改動的*a
獲得 Pointer的value今日講了Pointer作為數據結構怎麼去使用,那麼明天開始談物件式編程。這將會好玩很多