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