C++引用和结构体介绍

 更新时间:2021年11月19日 08:35:50   作者:梁唐  
这篇文章主要介绍了C++引用和结构体,结构体是我们自定义的复合类型,本质上也是一种变量类型,所以一样可以使用引用,下面来看看文章内容详细介绍,需要的朋友可以参考一下

文章转自微信公众号:Coder梁(ID:Coder_LT)

结构体是我们自定义的复合类型,本质上也是一种变量类型,所以一样可以使用引用。传递结构体引用的方式和其他变量一样:

struct P {
    int x, y;
};

void set_axis(P& a, P& b);


前文C++引用的使用与const修饰符当中也曾说过,虽然引用在基本类型上一样适用,但一般在实际使用当中,不在基本变量类型上使用引用。倒不是有什么问题,而是没有必要,毕竟基本变量类型占据的内存太小了,值传递和引用传递带来的差别几乎可以忽略不计。

因此使用得比较多的就是引用传递结构体,因为结构体当中的成员变量往往比较复杂,通过引用传递可以避免结构体的整体拷贝,可以节省时间和内存。

不仅如此,我们还可以通过函数返回引用:

P& return_ref(P& a);


返回引用的目的和传递引用参数的目的是一样的,为了节省时间和内存。

如果函数返回的不是引用,而是结构体的值的话,调用代码可能是这样的:

P m = return_ref(a);


return_ref这个函数的返回结果会先赋值到一个临时的位置,然后再复制给m。这和我们传递结构体参数的开销是一样的,如果我们返回的类型是引用,那么则可以节省掉这个开销。

但是,这里有一个坑。

我们通过函数返回的引用,不能是函数终止时就不存在的内存单元,也就是不能是临时变量。

比如下面这个例子就是不行的:

P& return_ref(P& a) {
    P cur = a;
    return cur;
}


我们在函数当中将传入的结构体a拷贝了一份,对这个拷贝体进行了返回。这样的代码从逻辑上看是没有问题的,但问题是我们创建的cur是一个临时变量,当函数返回的时候就会被销毁,不再存在,于是就会导致一些未知的错误。

所以如果要使用函数返回引用的话,一定要返回外部传入的引用或者全局变量的引用,而不能在函数内部临时创建。

除此之外,返回引用还有另外一个坑点,我们来看代码:

P a,b;

return_ref(a) = b;


这样的语法是被允许的,因为return_ref函数返回的是一个引用,我们当然可以对一个引用的值进行修改。有的情况下这一样会产生问题,如果你不想要这样的情况被允许,也有办法,我们可以使用const关键字,

将返回的结果限制成不可修改:

const P& return_ref(P& a);

到此这篇关于C++引用和结构体介绍的文章就介绍到这了,更多相关C++引用和结构体内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现正态随机分布的方法

    C++实现正态随机分布的方法

    本篇介绍了,使用c++实现正态随机分布的实现方法。需要的朋友参考下
    2013-05-05
  • C++逆向分析移除链表元素实现方法详解

    C++逆向分析移除链表元素实现方法详解

    这篇文章主要介绍了C++实现LeetCode(203.移除链表元素),本篇文章通过逆向分析的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2022-11-11
  • PyQt5利用Qt Designer实现简单界面交互

    PyQt5利用Qt Designer实现简单界面交互

    本文主要介绍了PyQt5利用Qt Designer实现简单界面交互,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • C++ open()和read()函数使用详解

    C++ open()和read()函数使用详解

    这篇文章主要介绍了C++中open()和read()函数的使用方法和参数,open()函数用于打开文件并返回文件描述符,read()函数用于从文件描述符中读取数据,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • C++编程中的数据类型和常量学习教程

    C++编程中的数据类型和常量学习教程

    这篇文章主要介绍了C++编程中的数据类型和常量学习教程,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C语言驱动开发之判断自身是否加载成功详解

    C语言驱动开发之判断自身是否加载成功详解

    在驱动开发中我们有时需要得到驱动自身是否被加载成功的状态,这个功能看似没啥用实际上在某些特殊场景中还是需要的。本文将通过示例详细讲讲这一功能的实现方法,需要的可以参考下
    2022-10-10
  • C语言中回调函数和qsort函数的用法详解

    C语言中回调函数和qsort函数的用法详解

    这篇文章主要为大家详细介绍一下C语言中回调函数和qsort函数的用法教程,文中的示例代码讲解详细,对我们学习C语言有一定帮助,需要的可以参考一下
    2022-07-07
  • c语言之char*和unsigned char*的区别及说明

    c语言之char*和unsigned char*的区别及说明

    这篇文章主要介绍了c语言之char*和unsigned char*的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C++实现完整功能的通讯录管理系统详解

    C++实现完整功能的通讯录管理系统详解

    来了来了,通讯录管理系统踏着七彩祥云飞来了,结合前面的结构体知识和分文件编写方法,我总结并码了一个带菜单的通讯录管理系统,在这篇文章中将会提到C的清空屏幕函数,嵌套结构体具体实现,简单且充实,跟着我的思路,可以很清晰的解决这个项目
    2022-05-05
  • 详解C语言函数返回值解析

    详解C语言函数返回值解析

    这篇文章主要介绍了详解C语言函数返回值解析的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论