C++中的数组引用和指针引用

  C++中的数组引用和指针引用

  一、引用的本质

  我们在讲解引用之前需要知道为什么C++中会单独提出引用这个概念,在前面也提到在C++从一定角度上是C语言的升级版,其实引用时和C语言中的指针一样的功能,并且使得语法更加简洁。既然提到和指针功能相同,那么引用的功能其实就是给空间取别名。

  代码解析:

  #define _CRT_SECURE_NO_WARNINGS

  #include

  using namespace std;

  void test01()

  {

  int a = 10;

  int& b = a;

  b = 100;

  cout << a << endl;

  }

  void func(int& a)

  {

  a = 200;

  }

  void test02()

  {

  int a = 10;

  func(a);

  cout << "a=" << a << endl;

  }

  int main()

  {

  test01();

  test02();

  system("pause");

  return EXIT_SUCCESS;

  }

  代码分析:

  void test01()

  {

  int a = 10;

  int& b = a;

  b = 100;

  cout << a << endl;

  }

  首先我们定义了一个整型变量,并且取值为。接下里,;相当于是给a的空间取别名为,类似于C语言中的指针,新定义了一个指针变量,指向了内存空间。这里的不是取地址符号,在这里是引用标志。最终通过引用修改内存空间a的值为,并且最终进行打印。

  最终结果如下图:

  void func(int& a)

  {

  a = 200;

  }

  void test02()

  {

  int a = 10;

  func(a);

  cout << "a=" << a << endl;

  }

  在中是直接在一个函数里进行引用的,我们在test02中换一个引用方式,将引用参数作为被调函数func的形参。最终结

  果如下图:

  总结:

  二、数组的引用

  int main()

  {

  int arr[] = { 1, 2, 3, 4, 5 };

  //第一种方法

  typedef int(MY_ARR)[5];

  MY_ARR& arref = arr;

  //第二种方法

  int(&arref2)[5] = arr;

  //第三种方法

  typedef int(&MY_ARR3)[5];

  MY_ARR3 arref3 = arr;

  for (int i = 0; i < 5; i++)

  {

  cout << arref[i] << endl;

  }

  cout << endl;//换行

  for (int i = 0; i < 5; i++)

  {

  arref2[i] = 100 + i;

  cout << arref2[i] << endl;

  }

  system("pause");

  return EXIT_SUCCESS;

  }

  代码分析:

  首先我们定义了一个整型数组为,并且数组大小为,数组元素为。

  接下来我们一共有三种数组的引用方法:

  第一种是定义数组类型,; 类似于为,为,为,相当于;

  第二种是直接定义引用,这种方法是最常用的。; 相当于;

  第三种是建立引用数组类型。;这种方法不怎么常用。

  最终运行结果如下图:

  三、指针的引用

  #define _CRT_SECURE_NO_WARNINGS

  #include

  using namespace std;

  void test01()

  {

  char* p2 = (char*)"馨怡";

  char*& p1 = p2;

  cout << p1 << endl;

  }

  //被调函数

  void func(char*& tmp)

  {

  char* p;

  p = (char*)malloc(64);

  memset(p, 0, 64);

  strcpy(p, "小花");

  tmp = p;//省了*

  }

  //主调函数

  void test02()

  {

  char* mp = NULL;

  func(mp);//省了&

  cout << mp << endl;

  }

  int main()

  {

  test01();

  test02();

  system("pause");

  return EXIT_SUCCESS;

  }

  分析代码:

  void test01()

  {

  char* p = (char*)"馨怡";

  char*& p1 = p;

  cout << p1 << endl;

  }

  为了让大家更清楚的了解,特意附上一张图

  从图中可以看出,首先我们创建了一个类型的指针变量,指向了文字常量区馨怡所在的内存空间,即图中的0x1234,那么经过指针的调用,即重新定义了一个指针变量也指向了内存空间,即给p取别名。

  最终结果如下图:

  //被调函数

  void func(char*& tmp)

  {

  char* p;

  p = (char*)malloc(64);

  memset(p, 0, 64);

  strcpy(p, "小花");

  tmp = p;//省了*

  }

  //主调函数

  void test02()

  {

  char* mp = NULL;

  func(mp);//省了&

  cout << mp << endl;

  }

  为了让大家更了解,特意附上一张图

  从上图可以看出,我们首先定义了一个局部指针变量mp指向了,并且存在于栈区。然后开始调用被调函数。作为的形参,等价于; 相当于给取别名为。在函数中创建了一个新的指针变量p,用于指向新申请的内存,大小为个字节,并且调用和函数将堆区中的空间赋值为“小花”。最终将变量p指向重新指向为指向,即最终从原来的指向了堆区中的小花,即内存地址为。

  最终结果如下所示:

  以上就是C++中的数组引用和指针引用的详细内容,更多关于C++数组引用和指针引用的资料请关注脚本之家其它相关文章!希望大家以后多多支持脚本之家!

  您可能感兴趣的文章: