欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++入门教程之函数传参和返回

程序员文章站 2022-12-11 08:19:08
指针的用途一:函数传参和返回。这个用途可以用左值引用代替。 参数传递 我们知道函数传参是一个赋值行为。当一个参数占用内存比较大而且赋值是复制所有数据的时候,就应该使用指针或者引...

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

参数传递

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

基础示例

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

#include 

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 

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++引入左值引用来代替指针在函数传参和返回上的功能。以上内容可以算是对引用的深入了解。

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