📜  C++中的指针与引用(1)

📅  最后修改于: 2023-12-03 15:14:03.594000             🧑  作者: Mango

C++中的指针与引用

C++中的指针与引用都是用于间接访问内存地址的机制,但它们之间还是有很大的区别的。

指针

指针是一种数据类型,它存储了一个变量的内存地址。指针的声明方式为type* name,其中type表示所指向的变量的数据类型,name表示指针的名称。使用指针时,需要通过“*”运算符来访问指针指向的变量的值。

指针操作符

C++中的指针操作符有以下几种:

  • *:用于获取指针所指向的变量的值。
  • &:用于获取变量的内存地址。
  • ++--:用于将指针指向后一个或前一个内存单元。
  • +-:用于将指针向前或向后移动n个单位。
  • []:用于访问指针所指向的数组元素。
指针的示例
int main() {
    int var = 10; // 定义一个整型变量var
    int* p; // 定义一个整型指针p
    p = &var; // 将p指向var
    cout << "var 的值为:" << var << endl;
    cout << "var 的地址为:" << &var << endl;
    cout << "p 指向的变量的值为:" << *p << endl;
    cout << "p 指向的变量的地址为:" << p << endl;
    return 0;
}
指针作为函数参数

指针作为函数参数时,可以通过指针来改变函数外部的变量的值。

// 交换两个整数的值
void swap(int* x, int* y) {
    int temp = *x;
    *x = *y;
    *y = temp;
}

int main() {
    int a = 1;
    int b = 2;
    swap(&a, &b);
    cout << "a 的值为:" << a << endl;
    cout << "b 的值为:" << b << endl;
    return 0;
}
引用

引用是一种变量别名,它在声明时需要用&符号来标识。引用一旦初始化后,就不能再指向其它变量。

引用的示例
int main() {
    int var = 10; // 定义一个整型变量 var
    int& ref = var; // 引用 ref 到 var,此时 ref 就是 var 的别名
    cout << "var 的值为:" << var << endl;
    cout << "ref 的值为:" << ref << endl;
    ref = 20; // 修改 ref 的值,也会同时修改 var 的值
    cout << "修改后 var 的值为:" << var << endl;
    cout << "修改后 ref 的值为:" << ref << endl;
    return 0;
}
引用作为函数参数

引用作为函数参数时,函数可以直接改变函数外部的变量的值,且更为简洁。

// 交换两个整数的值
void swap(int& x, int& y) {
    int temp = x;
    x = y;
    y = temp;
}

int main() {
    int a = 1;
    int b = 2;
    swap(a, b);
    cout << "a 的值为:" << a << endl;
    cout << "b 的值为:" << b << endl;
    return 0;
}
指针和引用的区别
  • 指针可以为NULL,引用不能为空。
  • 指针可以被重新赋值,引用一旦初始化之后就不能再改变。
  • 指针可以有多级,引用只能有一级。
  • 指针和引用的sizeof值不同。指针的sizeof是4或8,引用的sizeof等同于被引用对象的sizeof。
  • 指针需要使用'*'运算符来访问内存中的内容,而引用不需要。
结论

指针和引用都是非常重要的C++特性。它们都可以提高程序的效率并简化程序的编写。选择使用指针或者引用要根据具体情况而定,要根据程序的需求和性能需求来灵活选择。