• Index

函数传参和返回

Reads: 10

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

参数传递

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

基础示例

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

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

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


Comments

Make a comment

  • Index

WARNING: You are using an old browser that does not support HTML5. Please choose a modern browser (Chrome / Microsoft Edge / Firefox / Sarafi) to get a good experience.