首页 > 编程语言 >8.2 C++ 引用与取别名

8.2 C++ 引用与取别名

时间:2023-10-21 15:13:24浏览次数:30  
标签:8.2 cout int 别名 Person 引用 include ptr C++

C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。

普通变量引用: 引用的实质就是取别名,&写到等号左侧叫引用,写到等号右侧叫取地址.

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
  int x = 10;

  int &tmp = x;   // 普通引用
  int *ptr = &x;  // 定义指针

  cout << "tmp => "<< &tmp << endl;
  cout << "x => "<< &x << endl;
  cout << "ptr => " << ptr << endl;

  system("pause");
  return 0;
}

普通数组引用: 普通数组应用指针类型。

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
  int Array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

  // 第一种引用取别名的方式
  int(&p_array)[10] = Array;   // 给数组取别名(引用数组)

  // 用别名输出引用数据
  for (int x = 0; x < 10; x++)
    cout << p_array[x] << " ";

  // 第二种引用取别名的方式
  typedef int(type_array)[10];  // 定义具有10个元素的数组
  type_array &type_ptr = Array;
  for (int x = 0; x < 10; x++)
    cout << type_ptr[x] << " ";

  system("pause");
  return 0;
}

向函数中传递引用: 参数传递3种方式,传递数值,传递地址,还可以传递引用.

#include <iostream>

using namespace std;

// 传递引用实现对换
void MySwap(int &x, int &y)
{
  int tmp = x;
  x = y;
  y = tmp;
  cout << "MySwap ==> x = " << x << endl;
}

// 传递指针实现对换
void MySwap_PTR(int *x, int *y)
{
  int tmp = *x;
  *x = *y;
  *y = tmp;
  cout << "MySwap_PTR ==> x = " << *x << endl;
}

int main(int argc, char* argv[])
{
  int x = 10;
  int y = 20;
  
  cout << "x = " << x << endl;
  MySwap(x, y);
  cout << "x = " << x << endl;

  system("pause");
  return 0;
}

返回引用的函数: 将一个函数定义为可引用的类型,可在表达式内使用左值引用。

#include <iostream>

using namespace std;

int & dowork()
{ // 局部变量x,返回前销毁,引用则不存在了
  int x = 10;
  cout << "x = " << x << endl;
  return x;
}

int main(int argc, char* argv[])
{
  int &ret = dowork();

  cout << ret << endl;  // 第一次输出正常
  cout << ret << endl;  // 第二次输出由于引用被释放,所以就会产生错误

  dowork() = 1000;               // 引用也可以作为左值使用
  int re_ret = dowork() = 1000;  // 相当于执行 re_ret = x = 1000;
  cout << re_ret << endl;

  system("pause");
  return 0;
}

定义常量引用: 常量引用一般情况下不可修改,但是我们可以通过分配新的内存的方式强行修改它.

#include <iostream>

using namespace std;

int dowork()
{
  const int &ref = 100;    // 常量应用无法被修改

  // 如果真的想要修改,我们可以使用以下方式
  int *ptr = (int*)&ref;
  *ptr = 2000;

  return ref;
}

int do_work(const int &val)
{
  int *ptr = (int*)&val;
  *ptr = 1000;
  return val;
}

int main(int argc, char* argv[])
{
  int ret = dowork();
  cout << ret << endl;

  int ret_val = do_work(10);
  cout << ret_val << endl;

  system("pause");
  return 0;
}

定义指针引用: 通过指针的方式引用函数。

#include <iostream>

using namespace std;

struct Person { int m_age; };

void allocat(Person **ptr)
{
  *ptr = (Person *)malloc(sizeof(Person));
  (*ptr)->m_age = 100;
}

void allocatByref(Person* &ptr)
{
  ptr = (Person *)malloc(sizeof(Person));
  ptr->m_age = 1000;
}

int main(int argc, char* argv[])
{
  // 普通开辟空间写法
  struct Person *ptr = NULL;
  allocat(&ptr);
  cout << "ptr --> " << ptr->m_age << endl;

  // 使用指针引用开辟空间
  Person *ptr_byref = NULL;
  allocatByref(ptr_byref);
  cout << "ptr_byref --> " << (*ptr_byref).m_age << endl;

  system("pause");
  return 0;
}

本文作者: 王瑞
本文链接: https://www.lyshark.com/post/2f1b0146.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

标签:8.2,cout,int,别名,Person,引用,include,ptr,C++
From: https://www.cnblogs.com/LyShark/p/17778990.html

相关文章

  • 8.3 C++ 定义并使用类
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • 8.4 C++ 运算符重载
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • 8.5 C++ 继承与多态
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • C++函数如何具有多个返回值?
      本文介绍在C++语言中,使用一个函数,并返回两个及以上、同类型或不同类型的返回值的具体方法。  对于C++语言而言,其不能像Python等语言一样在一个函数中返回多个返回值;但是我们也会经常遇到需要返回两个甚至更多个值的需求。针对这种情况,我们可以通过pair、tuple(元组)等数据结......
  • C++语言基础纲要
    1、C++程序的结构2、输出语句cout<<5<<"hello"<<endl;3、输入语句cin>>a;4、变量 三要素:类型变量名值 命名规则 使用原则5、常量const关键字修饰6、基本数据类型 整型 int 3588 浮点型 double双精度float单精度 字符型 char'A''8' 布尔类型 boolt......
  • C++数据类型:
    C++数据类型:一:基本数据类型类型关键字布尔型bool字符型char整型int浮点型float双浮点型double无类型void宽字符型wchar_t其实wchar_t是这样来的:typedefshortintwchar_t;所以wchar_t实际上的空间是和shortint一样。一些基本......
  • C++学习笔记Day2
    关于String对象的一些事1.string对象来源于C++标准库<string>,表示一种可变长的字符序列,定义在命名空间std之中。2.string对象无初始值默认为空字符串。3.若是使用等号对string变量进行初始化,属于拷贝初始化,不使用等号,如strings6("hiya");strings7{"11123"};strings8(10,"c......
  • 栈实现算术优先级运算c++
    #include<stdlib.h>#include<stdio.h>#include<iostream>usingnamespacestd;#defineSTACK_INIT_SIZE100//栈初始开辟空间大小#defineSTACK_INCREMENT10//栈追加空间大小//优先级数组,2表示top>c,1表示top<c,0表示top=c,-1表示错误intprior[7][7]={{2,2,......
  • C++ Primer 中文版(第 5 版)pdf电子版 C++ Primer, 5th Edition
    C++Primer中文版(第5版)pdf电子版C++Primer,5thEdition作者:[美]StanleyB.Lippman/[美]JoséeLajoie/[美]BarbaraE.Moo原作名:C++Primer,5thEdition......
  • C++类型转换
    C++类型转换1.const_castconst_cast可以将const转换成非const,也可以将非const转换成const。需要注意的是const_cast只能用于改变指针或者引用的底层const。底层const和顶层const首先要弄清楚const修饰的到底是谁,用顶层表示指针本身是个常量(指针常量),底层表示指针所指向的对......