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的位置

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值