c++ primer学习笔记(5)-函数(1)
2011-02-24 19:58 Clingingboy 阅读(449) 评论(0) 编辑 收藏 举报
一.基础
1.无参函数
#include <iostream>
#include <string>
//无参数,无返回值
void SayHello()
{
std::cout << "Hello" << std::endl;
}
//效果相同
void SayHello2(void)
{
std::cout << "Hello" << std::endl;
}
2.有参函数
//有参数,无返回值
void Subtract(int a,int b)
{
std::cout << "result:";
std::cout << a-b << std::endl;
}
3.有返回值
//有返回值
int Max(int a,int b)
{
if(a>b)
return a;
return b;
}
测试代码
SayHello();
Subtract(10,5);
std::cout << "Max result:";
std::cout << Max(11,22)<< std::endl;
二.传参
1.非引用形参(值类型复制)
//无效
void Zero1(int p)
{
p=0;
}
2.指针形参
//更改有效
void Zero2(int *p)
{
*p=0;
}
注意:两者都是需要复制
Test
int i = 42;
int *p = &i;
std::cout << "i: " << i << '\n'; // prints i: 42
Zero1(i);
std::cout << "i: " << i << '\n'; // prints i: 42
Zero2(p);
std::cout << "after i: " << i << '\n'; // prints i: 0
3.const形参(参数不可更改)
//编译通过
int Fix(int a)
{
if(a>10)
a=10;
return a;
}
int ReadFix(const int a)
{
//错误,无法编译
if(a>10)
a=10;
return a;
}
4.引用形参(引用是别名)
经典的swap方法
//无效
void swap1(int v1, int v2)
{
int tmp = v2;
v2 = v1;
v1 = tmp;
}
//有效
void swap2(int &v1, int &v2)
{
int tmp = v2;
v2 = v1;
v1 = tmp;
}
Test1
int i = 10;
int j = 20;
cout << "Before swap():\ti: "
<< i << "\tj: " << j << endl;
swap1(i, j);
cout << "After swap():\ti: "
<< i << "\tj: " << j << endl;
Test2换做swap2的结果
5.const引用
bool isShorter(const string &s1, const string &s2)
{
return s1.size() < s2.size();
}
不对引用进行修改和复制
6.更灵活的const引用
int incr(int &val)
{
return ++val;
}
int main()
{
short v1 = 0;
const int v2 = 42;
int v3 = incr(v1); // error: v1 is not an int
v3 = incr(v2); // error: v2 is const
v3 = incr(0); // error: literals are not lvalues
v3 = incr(v1 + v2); // error: addition doesn't yield an lvalue
int v4 = incr(v3); // ok: v3 is a non const object type int
return 0;
}
非const引用形参只能与完全同类型的非const对象关联,要求非常严格.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现