iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
自我挑戰組

C++入門即放棄系列 第 12

[DAY12]傳送資料複製品!

  • 分享至 

  • xImage
  •  

改了又好像沒有?

  • 傳值的函式裡改了,居然不會影響外面的變數?
  • 函式可以「改到原本的變數」嗎?

如何解決?

把變數的「地址」傳給函式

函式裡透過指標找到房子

就能直接改裡面的東西了

範例

📌交換兩個數字,需要一個盒子

  1. 先把 a 的值存到盒子
  2. b 的值放進 a
  3. 把盒子的值放進 b

📌如果直接 a = b,那麼 a 的值就消失了

#include <iostream>
using namespace std;
void swap(int *x, int *y) 
{
    int temp = *x;  
    *x = *y;       
    *y = temp;     
}

int main() 
{
    int a = 5, b = 10;
    swap(&a, &b); 
    cout << "a = " << a << ", b = " << b << endl;
    return 0;
}

引用(&)

📌 引用變數位置

#include <iostream>
using namespace std;
void changeValue(int &x) 
{
    x = 2; 
}
int main() 
{
    int a = 1;
    changeValue(a); 
    cout << "a = " << a << endl;
    return 0;
}

指標(*)

📌 傳入地址,並用 * 取值修改

#include <iostream>
using namespace std;
void changeValue(int *x) 
{
    *x = 2; 
}
int main() 
{
    int a = 1;
    changeValue(&a); 
    cout << "a = " << a << endl;
    return 0;
}

為什麼要用指標?

  • 讓函式「真正」修改外面的變數
  • 節省記憶體,不需要一直複製大量資料
  • 在處理陣列、字串時,常常用指標傳參數

結論

函式參數除了傳值(by value)

還能使用指標傳址(by pointer)

這樣函式就可以直接操作原本的變數

  • 傳值 → 給函式一份「複製品」,不會改到外面真實的資料
  • 傳址 → 把「鑰匙」交出去,讓函式能進入真正的資料盒子中進行修改

上一篇
[DAY11]你跟我好像!
系列文
C++入門即放棄12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言