C++入门教程(四十七):函数传参和返回

本文通过实例详细介绍了C++中指针用于函数传参和返回的应用,并对比了指针与引用的区别,帮助读者更好地理解和掌握C++的进阶知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/video/av20868986/

目录

指针的用途一:函数传参和返回。这个用途可以用左值引用代替。

参数传递

我们知道函数传参是一个赋值行为。当一个参数占用内存比较大而且赋值是复制所有数据的时候,就应该使用指针或者引用。

基础示例

以下是函数参数使用指针的用法:

#include <iostream>

void print_string(const std::string *ptrtext)
{
    std::cout << *ptrtext << std::endl;
}

int main(void)
{
    std::string text = "小古银的C++教程";
    print_string(&text);
    return 0;
}

基础讲解

传递参数的时候,将变量text的地址赋值函数形参ptrtext,然后执行输出。传递参数是只复制了地址,而没有复制字符串。

基本上和引用的用法相同,和引用不同的是,由于值没有地址,不能在值前加&然后直接传给函数,这是不行的。

返回值

基础示例

#include <iostream>

const std::string * print_string(const std::string *ptrtext)
{
    std::cout << *ptrtext << std::endl;
    return ptrtext;
}

int main(void)
{
    std::string text = "小古银的C++教程";
    auto pointer = print_string(&text);
    std::cout << *pointer << std::endl;
    return 0;
}

输出结果:

小古银的C++教程
小古银的C++教程

基础讲解

上面这样写是没问题的,下面这样写就是问题大大滴

const std::string * print_string(void)
{
    std::string text; // 函数结束后所有栈内存全部释放
    return &text; // 将没有指向内存的地址返回是非常严重的错误
}

总结

为了使这个用途的操作更加方便和不容易出错,C++引入左值引用来代替指针在函数传参和返回上的功能。以上内容可以算是对引用的深入了解。

由于左值引用是简化的指针,所以左值引用实际占用内存的大小就是指针占用内存的大小。

本书主要是依照计算机本科专业的实际教学需要来编排内容的。虽然内容的条理可能不及某些专业的C++工具书那么清晰,但是这样的次序让初学者比较容易上手。毕竟那些工具书是面向一些已经掌握C++或有较高的高级语言程序设计基础的读者。编写此书的主旨就是不要一下子把什么都说出来,而是一点一点循序渐进地增长读者的能力。这样,读者就不会一下子被那么多难以接受的概念吓住,以至于失去了继续学习的信心。<br><br>本书的主要论述对象是Microsoft Visual C++,对于以前的C语言Borland C++不作讨论,以免初学者把各种概念混淆起来,也有效降低了学习的压力。对于一些C++中存在却不常用的内容,本书一般一笔带过或不予提及。因为这些内容在应试方面不作要求,在实际使用上也可以由其他方法代替。但是,如果你是一位初学者,那么就请务必要看到本书的每一个角落。你所遗落的一句话就有可能是一个知识的关键点。<br><br>本书的内容有四个特点:<br><br>1、 粗体字:读者必须掌握理解的内容,也是每个知识点的精髓或要点。很多初学者容易犯的错误也在粗体字中予以提醒。<br><br>2、 试试看:把一些可能与一般情况不符甚至矛盾的情况列举出来,鼓励读者上机试验,以得到深刻的结论。这些结论可能对以后的学习有所帮助。所以建议所有有条件的读者务必去试试看。对于没有条件的读者,则需要牢记本书给出的结论。<br><br>3、 算法时间:向大家介绍一些程序设计的常用算法。其实很多时候一个程序就是把这些算法以不同形式搭建起来。能够掌握这些算法不论是对阅读别人的代码还是自己设计程序都有着很大的帮助。<br><br>4、 习题:帮助大家巩固已经学习的知识。有些题型则是符合应试的要求。从难度上来说,都算适中。如果读者已经掌握了章节中的知识,那么做这些习题也不会有什么困难。<br><br>本书的定位是C++程序设计的教学辅导书,而不是C++的工具书或语法书。如果你想要了解更多深层的内容,请查阅C++的专业工具书。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值