C++的指標*是根據上下文來推斷指標的用法和意義, 有以下四種用法

  1. 乘法 (數學運算子)
  2. int* x (指標變數)
  3. Void add(int* x) (函式引數)
  4. *x (取指標指向變數的值)

以下針對2-4的程式的寫法

void add(int *x, int *y)// 3. 函式內的引數
{
    printf("sum = %d\n", *x + *y); //指標指向的數值相加
}
int main()
{
    int num1 = 2, num2 = 3;
    printf("&num1 = %p\n", &num1); //  &num1 = 0x7fff34867b50
    int *pi_1, *pi_2;              // 2.宣告指向整數的指標
    pi_1 = &num1;                  //用指標pi_1指向num1的位址
    pi_2 = &num2;                 //用指標pi_2指向num2的位址
    printf("pi_1 = %d\n", *pi_1); // pi_1 = 2   (4.用*取指標指向變數的值)
    printf("&pi_1 = %p\n", &pi_1); // &pi_1 = 0x7ffe140a9f68
    add(pi_1, pi_2);               // sum = 5
}

指標變數

若將變數宣告為指標變數, 則操作都變成記憶體操作

int* x=0; //x initial一個int記憶體空間(4 byte)在記憶體位置=0的地方
x++ //x向前移動一個int大小的記憶體位置, 0x04

多重指標

&取變數記憶體位置

int A=2;
int *ptr1=&A; // 建立指標變數ptr1,指向變數A的位址
int **ptr2=&ptr1; //建立指標變數ptr2,指向指標變數ptr1的位址
int ***ptr3=&ptr2; // 建立指標變數ptr3,指向指標變數ptr2的位址

***ptr3=**ptr2=*ptr1=2

&用法

  1. and (邏輯運算子)
  2. 解出變數記憶體位置
  3. 函式使用時設為參考(reference)

解出記憶體位置

int *ptr;
int b = 10;
printf("b:%d\n", b);       //b變數值:10
printf("&b:%p\n", &b);     //&b:0x7ffd8bc63f5c b本身的位址
ptr = &b;                   // ptr指向b的位置
printf("ptr:%d\n", *ptr);  //ptr:10  用*取指標指向變數的值
printf("&ptr:%p\n", &ptr); //&ptr:0x7ffd8bc63f60 ptr本身的位址

函式參考

當使用&當成函式引數前綴, 修改的值會傳遞回外部

void swapValue1(int a, int b)  // 複製a、b數值後交換
{
    int tmp = a;
    a = b;
    b = tmp; // 交換完的結果僅在函式內
    cout << "swapValue1_a=" << a << endl;
    cout << "swapValue1_b=" << b << endl;
}
void swapValue2(int &a, int &b) // 輸入a、b位址
{    // &在函式(function)使用時設為參考 (reference)
    int tmp = a;
    a = b;
    b = tmp; // a、b值互換結果在函式外仍沿用
    cout << "swapValue2_a=" << a << endl;
    cout << "swapValue2_b=" << b << endl;
}

int a = 5;
int b = 10;
swapValue1(a, b); //10, 5
cout << "a=" << a << endl; //5
cout << "b=" << b << endl; //10
cout << "&a=" << &a << endl; //原本a的位置
cout << "&b=" << &b << endl; //原本b的位置
swapValue2(a, b); //10, 5
cout << "a=" << a << endl; //10
cout << "b=" << b << endl; //5
cout << "&a=" << &a << endl; //原本a的位置
cout << "&b=" << &b << endl; //原本b的位置

如果喜歡文章, 不妨按下喜歡訂閱支持

如果真的想支持我進行創作與實踐計畫, 也可以進行打賞
BTC (BTC) : 1LFRBqvWR9GGizBzoFddkb5xRpAzKRVoDC
BTC (BSC) : 0xe1cda3eb778d1751af17feac796a4bbe4dbca815
BTC (ERC20) : 0xe1cda3eb778d1751af17feac796a4bbe4dbca815
USDT (TRC20) : TT7wgKuYoHwfRy3vCr38Qy3gnS3JJ1aKvn

如果想使用幣安, 可以使用我的推薦連結可以節省手續費10%
或使用推薦碼 : A5YRMD2T


#cpp #C #C語言 #C++ #Programming #program language #指標 #引用 #reference #程式語言







Related Posts

Mongo DB & Mongoose 常用語法

Mongo DB & Mongoose 常用語法

當 React web app 遇上 Progressive web app

當 React web app 遇上 Progressive web app

React-[入門篇]-Props基礎

React-[入門篇]-Props基礎


Comments