这两天写Win32API / C++,发现自己基本功不行了。下面为自己的理解:

// 正常定义一个整型 a
int a = 1;

// 对 a 用 & 取地址
cout << "Address of a: " << &a << endl;

// 定义一个整型指针,指向 a
int* b = &a;
// b 则是一个地址
cout << "Address of b: " << b << endl;

// 总结:
// - `*` 取值
// - `&` 取地址

注意:不可以:

int *b = 1; // 这样是错误的 int* b 定义的是整型指针类型
#include <iostream>

using namespace std;

int main() {
    int a = 1;
    // 定义引用
    int& b = a;
    cout << "a: " << a << "; b: " << b << endl;
    b = 2;
    cout << "a: " << a << "; b: " << b << endl;
    a = 4;
    cout << "a: " << a << "; b: " << b << endl;
    // 可以理解为 "一模一样的分身" , 一个变了,另一个也变
    return 0;
}

/* Output:
a: 1; b: 1
a: 2; b: 2
a: 4; b: 4
*/

下面摘自:https://www.cnblogs.com/yanlingyin/archive/2011/12/07/2278961.html

#include<iostream>

using namespace std;

//值传递
void change1(int n) {
    cout << "值传递--函数操作地址" << &n << endl;         //显示的是拷贝的地址而不是源地址 
    n ++;
}

//引用传递
void change2(int & n) {
    cout << "引用传递--函数操作地址" << &n << endl; 
    n ++;
}

//指针传递
void change3(int *n) {
    cout << "指针传递--函数操作地址" << n << endl; 
    *n = *n + 1;
}

int main() {
    int n = 10;
    cout << "实参的地址" << &n << endl;
    change1(n);
    cout << "after change1() n=" << n << endl;
    change2(n);
    cout << "after change2() n=" << n << endl;
    change3(&n);
    cout << "after change3() n=" << n << endl;
    return true;
}

注意:

  • 传指针给一个函数,只有改变 *ptr 的内容才能真正改变这个变量的值。如果直接修改 ptr 为别的地址,原来那个变量无论是值还是地址,都没有改变,因为只修改了一个 地址变量
  • 关于 ** : 指向指针的指针。
最后修改:2021 年 08 月 04 日 01 : 20 AM
真的不买杯奶茶嘛....qwq