# 指標  ## 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
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.