服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++引用和结构体介绍

C++引用和结构体介绍

2022-02-27 16:08梁唐 C/C++

这篇文章主要介绍了C++引用和结构体,结构体是我们自定义的复合类型,本质上也是一种变量类型,所以一样可以使用引用,下面来看看文章内容详细介绍,需要的朋友可以参考一下

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

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

?
1
2
3
4
5
struct P {
    int x, y;
};
 
void set_axis(P& a, P& b);

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

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

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

?
1
P& return_ref(P& a);

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

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

?
1
P m = return_ref(a);

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

但是,这里有一个坑。

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

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

?
1
2
3
4
P& return_ref(P& a) {
    P cur = a;
    return cur;
}

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

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

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

?
1
2
3
P a,b;
 
return_ref(a) = b;

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

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

?
1
const P& return_ref(P& a);

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

延伸 · 阅读

精彩推荐
  • C/C++详解c语言中的 strcpy和strncpy字符串函数使用

    详解c语言中的 strcpy和strncpy字符串函数使用

    strcpy 和strcnpy函数是字符串复制函数。接下来通过本文给大家介绍c语言中的strcpy和strncpy字符串函数使用,感兴趣的朋友跟随小编要求看看吧...

    spring-go5642021-07-02
  • C/C++C语言中炫酷的文件操作实例详解

    C语言中炫酷的文件操作实例详解

    内存中的数据都是暂时的,当程序结束时,它们都将丢失,为了永久性的保存大量的数据,C语言提供了对文件的操作,这篇文章主要给大家介绍了关于C语言中文件...

    针眼_6702022-01-24
  • C/C++深入理解goto语句的替代实现方式分析

    深入理解goto语句的替代实现方式分析

    本篇文章是对goto语句的替代实现方式进行了详细的分析介绍,需要的朋友参考下...

    C语言教程网7342020-12-03
  • C/C++c++ 单线程实现同时监听多个端口

    c++ 单线程实现同时监听多个端口

    这篇文章主要介绍了c++ 单线程实现同时监听多个端口的方法,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下...

    源之缘11542021-10-27
  • C/C++C语言实现电脑关机程序

    C语言实现电脑关机程序

    这篇文章主要为大家详细介绍了C语言实现电脑关机程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    xiaocaidayong8482021-08-20
  • C/C++学习C++编程的必备软件

    学习C++编程的必备软件

    本文给大家分享的是作者在学习使用C++进行编程的时候所用到的一些常用的软件,这里推荐给大家...

    谢恩铭10102021-05-08
  • C/C++C++之重载 重定义与重写用法详解

    C++之重载 重定义与重写用法详解

    这篇文章主要介绍了C++之重载 重定义与重写用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    青山的青6062022-01-04
  • C/C++C/C++经典实例之模拟计算器示例代码

    C/C++经典实例之模拟计算器示例代码

    最近在看到的一个需求,本以为比较简单,但花了不少时间,所以下面这篇文章主要给大家介绍了关于C/C++经典实例之模拟计算器的相关资料,文中通过示...

    jia150610152021-06-07