指標(pointer)
定義:儲存變數的記憶體位置。
1 | int main(){ |
new/delete
由於指標是儲存記憶體位置,所以今天必須給他一個記憶體位置,如果沒給就要進行值的轉換,例如以下:(以下為錯誤示範)
1
2
3
4
5int main(){
int * a;
*a = 100;
cout << *a << endl;
}new
來配置一個記憶體位置給他 1
2
3
4int * a = new int;
cout << "a的記憶體位置:" << a << endl;
*a = 100;
cout << "a的值:" << *a << endl;delete
,這樣這個記憶體空間就被釋放了
1
2
3
4
5
6
7int * a = new int;
cout << "a的記憶體位置:" << a << endl;
*a = 100;
cout << "a的值:" << *a << endl;
delete a;//此記憶體位置被釋放了
cout << *a << endl;
cout << a << endl;1
2
3
4
5
6
7
8
9
10
11
12
13
using namespace std;
int change(int a){
a = 0;
return a;
}
int main(){
int var = 100;
cout << "Before change:" << var << endl;//output 100
var = change(var);
cout << "After change:" << var << endl;//output 0
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
using namespace std;
void change_pointer(int * a){
*a = 0;
}
int main(){
int var = 100;
cout << "Before change:" << var << endl;
change_pointer(&var);
cout << "After change:" << var << endl;
return 0;
}void
# 參考(reference)
參考就像是一個變數的複製,雖然名稱不同,但擁有相同的記憶體空間
1
2
3
4
5int main(){
int a = 10;
int &b = a;
return 0;
}1
2
3
4
5
6
7
8
9void change(int &data){
data = 100;
}
int main(){
int a = 10;
change(a);
std::cout << a << std::endl; // output:100
return 0;
}