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++引入左值引用来代替指针在函数传参和返回上的功能。以上内容可以算是对引用的深入了解。
由于左值引用是简化的指针,所以左值引用实际占用内存的大小就是指针占用内存的大小。