iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
自我挑戰組

30天重新認識C++系列 第 9

第九天: C++ 基本認識 (六)

  • 分享至 

  • xImage
  •  

今天要來重新回顧當初讓人苦惱的指標~

C++ 指標

指標是指儲存記憶體的位址(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++ 函數

C++的函數(function),宣告如下:
回傳資料型態 函數名稱(輸入參數...) { 中間的函數運作過程 }
可以想像成一個處理過程(processing),定義了輸入、輸出跟過程。

在一開始的 C++ Hello World 程式裡面就可以看到第一個函數也是程式的主要進入點 main() 函數
自訂函數要放在主要函數上方,不然會編譯不了

int main()
{
    test(); // Got the error

}

void test() {

}

這邊就先簡單帶個函數的概念,更多的細節就在後面的章節再來探索吧~


好啦,那有關於 C++ 的基本認識,總算是在這第 9 天結束了,發現這樣上班完,下班還要趕文章的生活真的累爆 QQ
明天開始要來接觸物件導向(Object-Oriented),一個讓程式不再是程式的酷東西,期待期待~

參考資料

C++ 指標教學


上一篇
第八天: C++ 基本認識 (五)
下一篇
第十天: C++ 物件 (一)
系列文
30天重新認識C++30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言