今天要來重新回顧當初讓人苦惱的指標~
指標是指儲存記憶體的位址(address)的資料型態,下面就來看一下怎麼宣告指標:
int t = 32;
int* ptr_t = &t;
cout << "t: " << t << endl; // t: 32
cout << "ptr_t: " << ptr_t << endl; // ptr_t: 0000003ECBF3FA74 => int t的記憶體位址
int* ptr_t = &t;
這行的意思為: 宣告指標變數(ptr_t)的型態(基本資料: int),指標變數要跟被指的變數為同一型態(int t),而要抓位址(address)的運算子為&
取址運算子
如果是指標變數(*
),後面如果要指派變數但沒有 &
的話,是會無法編譯成功的。
註: 指標變數的宣告 int *ptr_t 跟 int* ptr_t 都是一樣的
指標變數也能取值,透過*
就可以將指標變數存的位址所對應的值抓出來。
cout << "*ptr_t: " << *ptr_t << endl; // *ptr_t: 32
在 C++ 11 以後,還多了一種新的關鍵字用來表是空的指標 nullptr
,相當於是把指標變數裡面的存的位址給清空:
ptr_t = nullptr;
cout << "ptr_t: " << ptr_t << endl; // ptr_t: 0000000000000000
cout << "*ptr_t: " << *ptr_t << endl; // Error,因為裡面沒有值可以取
這邊也先帶一點額外的部分,指標也會運用在陣列上面,陣列就是負責存一連串同資料型態變數的資料型態,陣列本身也是指標
int a[] = { 1, 2, 3 };
int* array = a;
cout << "&a: " << &a << endl;
cout << "&a[0]: " << &a[0] << endl;
cout << "&a[1]: " << &a[1] << endl;
cout << "array: " << array << endl;
cout << "array + 1 == &a[1] : " << array + 1 << endl;
cout << "*array: " << *array << endl;
cout << "*array + 1 == a[1] : " << *(array+1) << endl;
C++的函數(function),宣告如下:
回傳資料型態 函數名稱(輸入參數...) { 中間的函數運作過程 }
可以想像成一個處理過程(processing),定義了輸入、輸出跟過程。
在一開始的 C++ Hello World 程式裡面就可以看到第一個函數也是程式的主要進入點 main() 函數自訂函數要放在主要函數上方,不然會編譯不了
int main()
{
test(); // Got the error
}
void test() {
}
這邊就先簡單帶個函數的概念,更多的細節就在後面的章節再來探索吧~
好啦,那有關於 C++ 的基本認識,總算是在這第 9 天結束了,發現這樣上班完,下班還要趕文章的生活真的累爆 QQ
明天開始要來接觸物件導向(Object-Oriented),一個讓程式不再是程式的酷東西,期待期待~