51工具盒子

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

C/C++ 指针和引用


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

int main() {

int number = 100;

// 指针方式 int* p = &amp;number; *p = 200; printf(&quot;number = %d\n&quot;, number);

// 引用方式 int&amp; r = number; r = 300; printf(&quot;number = %d\n&quot;, 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&amp; int_ref = number;
int_ref = 300;
printf(&quot;number = %d\n&quot;, number);

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

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

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

return 0;

}

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