51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

C/C++ 指针和引用


  1. 指针和引用区别 {#title-0} =====================
#include <stdio.h>
#include <string.h>


int main() {

    int number = 100;
    
    // 指针方式
    int* p = &number;
    *p = 200;
    printf("number = %d\n", number);
    
    // 引用方式
    int& r = number;
    r = 300;
    printf("number = %d\n", number);
    
    return 0;
}

程序运行结果:

number = 200
number = 300

上面代码中,可以看到:

  1. 指针能够实现间接修改变量的值,引用也可以,并且引用的语法更简单;
  2. 指针可以初始化 NULL,指针必须初始化为与合法的空间关联;
  3. 指针可以随时修改指向,但是引用一旦初始化就无法修改指向;
  4. C++标准只规定了引用的语义,并没有规定引用如何实现。在大部分编译器中引用在C++内部是通过常量指针来实现,因此引用所占空间大小与指针大小相同,只是这个过程由编译器内部实现,引用相当于与 Type* const 类型的指针;
  5. 指针在 C/C++中可以使用,引用只能在 C++ 中使用。

  1. 不同类型的引用 {#title-1} =====================
#include <stdio.h>


int main() {

    // 1. 普通变量引用
    int number = 100;
    int& int_ref = number;
    int_ref = 300;
    printf("number = %d\n", number);

    // 2. 常量引用
    const int& const_ref = number;
    // const_ref = 200;

    // 3. 指针变量引用
    int* p = NULL;
    int*& pointer_ref = p;
    pointer_ref = (int *)0x123;
    printf("p = %p\n", p);

    // 4. 右值引用(常量引用、右值引用才可以引用右值)
    const int& cref1 = 100;
    int&& cref2 = 100;
    printf("cref1 = %d,cref2 = %d\n", cref1, cref2);


    return 0;
}
赞(0)
未经允许不得转载:工具盒子 » C/C++ 指针和引用