C++的指標*是根據上下文來推斷指標的用法和意義, 有以下四種用法
- 乘法 (數學運算子)
- int* x (指標變數)
- Void add(int* x) (函式引數)
- *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
&用法
- and (邏輯運算子)
- 解出變數記憶體位置
- 函式使用時設為參考(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