# 指標  ## 1. 指標(pointer) 定義:儲存變數的記憶體位置。 ```cpp= int main(){ int a = 10; int * p = &a; cout << "a的值:" << a << endl; cout << "a的記憶體位置:" << p << endl; cout << "從記憶體位置取值:" << *p << endl; } ``` ### new/delete 由於指標是儲存記憶體位置,所以今天必須給他一個記憶體位置,如果沒給就要進行值的轉換,例如以下:(以下為錯誤示範) ```cpp= int main(){ int * a; *a = 100; cout << *a << endl; } ``` 這樣寫的話會出現Runtime Error(記憶體區段錯誤) 所以我們應該利用`new`來配置一個記憶體位置給他 ```cpp= int * a = new int; cout << "a的記憶體位置:" << a << endl; *a = 100; cout << "a的值:" << *a << endl; ``` 如果我們今天要把這個記憶體位置釋放,我們使用`delete`,這樣這個記憶體空間就被釋放了 ```cpp= int * a = new int; cout << "a的記憶體位置:" << a << endl; *a = 100; cout << "a的值:" << *a << endl; delete a;//此記憶體位置被釋放了 cout << *a << endl; cout << a << endl; ``` ### 把指標傳進function 以下為不使用指標來改變一個變數的值 ```cpp= #include <iostream> 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; } ``` 而以下為使用指標來改變當前變數的值 ```cpp= #include <iostream> 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; } ``` 我們直接把記憶體空間傳入function裡,這個function是直接改變這個記憶體空間的值,所以這個function不須要回傳,故為`void` ## 參考(reference) 參考就像是一個變數的複製,雖然名稱不同,但擁有相同的記憶體空間 ```cpp= int main(){ int a = 10; int &b = a; return 0; } ``` ###### tags: `中和高中`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up