C++基础与深度解析01——函数基本组成+函数传参的三种方法

这篇具有很好参考价值的文章主要介绍了C++基础与深度解析01——函数基本组成+函数传参的三种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0.前期准备

请安装Visual Studio
并学习基本的新建项目、新建CPP文件以及运行代码。

1.从Hello World 开始

1.1代码内容

函数功能:打印“Hello World”

#include<iostream>
int main()
{	
	std::cout << "Hello World" << std::endl;
	return 0;
}

1.2 相关知识点

1.函数构成
输入参数列表+函数名+返回类型+函数主体
如下图所示,但是main函数稍有特殊,其为cpp
C++基础与深度解析01——函数基本组成+函数传参的三种方法,C++基础与深度解析系列,c++,c#,开发语言
现举一个简单函数的例子,z= 2x-3y+3,其中xy均为浮点型小数,取函数名为CalBinFun,函数输入列表应包括x、y,返回值类型为float,函数代码如下:
注意:return 返回的数据,其数据类型必须和函数定义的返回值类型一致,即如下代码第三行z的定义必须为float。

float CalBinFun(float x, float y)
{
	float z = 2 * x - 3 * y + 3;
	return z;
}

可以在如下主函数中对以上函数进行反复调用

int main()
{	
	std::cout << CalBinFun(1.1,3.5)<< std::endl;
	std::cout << CalBinFun(2.9, 0.5) << std::endl;
	return 0;
}

2. 形参列表详解

上文提到的函数输入参数列表,其名称为形参列表,在函数定义过程中,其有多种使用方法,现进行详细介绍

2.1 形参和实参

用于接收传递值的变量被称为形参;传递给函数的值被称为实参
发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
如在上文函数CalBinFun中,float x, float y为形参,在调用函数之前,我们不知道其具体数值,只知道其数据类型, CalBinFun(1.1,3.5)1.1,3.5为实参,我们知道其具体数值,当算法执行float z = 2 * x - 3 * y + 3;时,其中形参xy分别为1.13.5,因为调用函数时,将实参赋值给形参。
函数调用时,实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误

2.2 三种函数参数传入方式

2.2.1 原理及是否修改主函数中实参的值

2.2.1.1值传参

将主函数中w的数值复制给PrWord01中的word,两个变量地址不同,在PrWord中改变Word的值不会影响主函数中w的值。

#include<iostream>
#include<string>
using namespace std;
//值传递
void PrWord01(int word)
{
	cout << "First:   " << word << endl;
	cout << "Address fun:   " << &word << endl;
	word = 2;
	cout << "Second:   " << word << endl;
}
int main()
{
	int w =20;
	PrWord01(w);
	cout << "After Print-> main:   " << w << endl;
	cout << "Address fun:   " << &w << endl;
	return 0;
}

C++基础与深度解析01——函数基本组成+函数传参的三种方法,C++基础与深度解析系列,c++,c#,开发语言

2.2.1.2指针传参

:将主函数中w的地址传递给函数PrWord02的word指针,word指针存储值为w的地址,在函数PrWord02中修改*word的值,即修改word存储的地址(也是主函数w地址上的值),所以指针传递方法修改形参的值,也就是修改了实参的值。

//指针传递
void PrWord02(int *word)
{
	cout << "First:   " << &word << endl;
	cout << "First:   " << word << endl;
	cout << "First:   " << *word << endl;
	*word = 2;
	cout << "Second:   " <<*word << endl;
	cout << "Second:   " << word << endl;
}
int main()
{
	int w =20;//002
	PrWord02(&w);
	cout << "After Print-> main:   " << w << endl;
	cout << "Address fun:   " << &w << endl;
	return 0;
}

C++基础与深度解析01——函数基本组成+函数传参的三种方法,C++基础与深度解析系列,c++,c#,开发语言

2.2.1.3引用传参

引用的本质是别名,相当于子函数中word是主函数中w的别名,其地址一致,修改子函数中形参也会修改主函数中实参。

#include<iostream>
#include<string>
using namespace std;
//引用传递
void PrWord03(int &word)
{
	cout << "First:   " << &word << endl;
	cout << "First:   " << word << endl;
	word = 2;
	cout << "Second:   " << word << endl;
}

int main()
{
	int w =20;
	PrWord03(w);
	cout << "After Print-> main:   " << w << endl;
	cout << "Address fun:   " << &w << endl;
	return 0;
}

C++基础与深度解析01——函数基本组成+函数传参的三种方法,C++基础与深度解析系列,c++,c#,开发语言
相比于前两者,引用传参是最省内存的方式,但是大多数情况,我们不想在子函数中修改主函数中的变量,只需在形参前加上关键字const,这样便无法修改形参,如下图对word的修改已经标出错误。
C++基础与深度解析01——函数基本组成+函数传参的三种方法,C++基础与深度解析系列,c++,c#,开发语言

2.2.2 Hello World的三种传参方式(作业)

以下给出字符串打印函数的三种传参方式,作为读者的练习参考答案文章来源地址https://www.toymoban.com/news/detail-569531.html

2.2.2.1 字符串方式
void PrWord01(string word)
{
	 cout <<"First:  "<< word <<  endl;
	 word = "changed";
	 cout << "Second:  " << word << endl;
}
void PrWord02(string *word)
{
	cout << "First:  " << word << endl;//存储的地址
	cout << "First:  " << *word << endl;//解引用:* 表示其保存的地址上保存的值
	*word = "changed";
	cout << "Second:  " << word << endl;
	cout << "Second:  " << *word << endl;
}
void PrWord03(string &word)//word 相当于取别名 word和w指向同一地址 保存相同的值 注意 一经引用&word不可以修改
{
	cout << "First:  " << word << endl;//word的值
	cout << "First:  " << &word << endl;//word的地址 
	word = "changed";
	cout << "Second:  " << word << endl;
	cout << "Second:  " << &word << endl;
}
void PrWord03(const string &word)//运行会报错 加了const word不可修改
{
	cout << "First:  " << word << endl;
	cout << "First:  " << &word << endl;
	word = "changed";
	cout << "Second:  " << word << endl;
	cout << "Second:  " << &word << endl;
}
2.2.2.2 字符数组方式
#include<iostream>
#include<string>
#include<typeinfo>
using namespace std;
//值传参  数组传参没有值传递  所谓值传参就是传递指向数组首地址的指针参数,与指针传参等效
void PrWord01(char word[])
{
	printf("01__________Address of word   %x \n", &word);
	printf("01__________Value of word   %x \n", word);
	printf("01__________Value of Value of word   %s \n", word);
	word[0] = 'h';
	printf("01__________After changed  Value of Value of word   %s \n", word);


}

//指针传参
void PrWord02(char  *word)
{
	printf("02__________Address of word   %x \n", &word);
	printf("02__________Value of word   %x \n", word);
	printf("02__________Value of Value of word   %s \n", word);
	word[1] = 'E';
	printf("02__________After changed  Value of Value of word   %s \n", word);


}

//引用传参
void PrWord03(char (&word)[12])//引用传递 必须输入数组长度  word是w的别名 其首地址和w首地址一致 
// 如果不想修改主函数中w 写成    void PrWord03(const char (&word)[12])/
{
	printf("03__________Address of word   %x \n", &word);
	printf("03__________Value of word   %x \n", word);
	printf("03__________Value of Value of word   %s \n", word);
	word[2] = 'L';
	printf("03__________After changed  Value of Value of word   %s \n", word);


}
int main()
{
	char w[] = "Hello world";
	printf("Address of w   %x \n", &w);
	PrWord01(w);
	printf("After PrWord01-> main:   %s  \n", w);

	PrWord02(w);
	printf("After PrWord02-> main:   %s  \n", w);
	PrWord03(w);
	printf("After PrWord03-> main:   %s  \n", w);
	return 0;
}

到了这里,关于C++基础与深度解析01——函数基本组成+函数传参的三种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript传参的6种方式

    JavaScript是一门非常灵活的语言,其参数传递方式也同样灵活。在本篇文章中,会详细介绍JavaScript中的参数传递方式,并提供相关的示例和解释。 在JavaScript中,基本类型参数(比如字符串、数字、布尔值等)是通过值传递的。这意味着,当我们将一个基本类型的值传递给一个

    2024年02月01日
    浏览(57)
  • Postman传参的JSON格式

    实体类: json格式: 1.JSON数值({ “key” : value}) 2.JSON字符串({ “key” : “value”}) 3.JSON数组({ “key” : [value]}) 4.JSON对象({ “key” : {value}}) 5.JSON对象数组({ “key” : [{“key1”: “value1”},{“key2”: “value2”}]}) 6.JSON数组对象({“key”:{“key1”:[value1,value2]}})

    2024年02月12日
    浏览(32)
  • VUE路由传参的实用方式

    本文讲解了VUE项目中路由之间的传值方式,涉及到的方法都是开发时常用的,希望对大家有多帮助。 首先定义好路由 在需要跳转的home组件中使用 router-link 标签 在跳转到的about组件中拿到传过来的值 小结:params传参类似post,路由配置可以为  path : \\\'/about/ : id’ 或   path :

    2024年02月08日
    浏览(38)
  • 小程序页面路由传参的方法?

    在小程序中,可以使用页面路由传递参数。有以下几种方式可以实现: 通过 URL 参数传递:在跳转到目标页面时,可以在 URL 中添加参数。例如: 在目标页面的 onLoad 方法中可以通过 options 参数获取传递的参数: 通过全局变量传递:可以通过小程序的全局变量来传递参数。在

    2024年01月17日
    浏览(39)
  • vue路由传参的三种方式

    目录 1.动态路由传参 2.params传参 3.query传参         使用“路径参数”使用冒号  :  标记。当匹配到一个路由时,参数值会被设置到  this.$route.params ,也可以使用props来接收   params  传参(不显示参数)也可分为 声明式 和 编程式 两种方式,与方式一不同的是,这里是通过

    2024年02月11日
    浏览(31)
  • vue中组件传参的几种方法

    Props:通过在父组件中定义props属性,将数据传递给子组件。子组件通过props属性接收数据。例如: $emit:通过在子组件中触发事件,将数据传递给父组件。父组件通过在子组件上监听事件,接收数据。例如: Provide/Inject:通过在父组件中提供数据,让子孙组件可以注入数据。

    2024年02月12日
    浏览(36)
  • JS中跳转传参的几种方法

    在JavaScript中,页面跳转并传递参数主要有以下几种方法: 1. 使用URL的查询字符串 这是最常见的方法,你可以在URL后面添加查询字符串来传递参数。查询字符串以 ? 开始,参数之间用 分隔。 例如: 在接收页面,你可以使用 window.location.search 来获取查询字符串,然后解析它来

    2024年04月26日
    浏览(33)
  • 微信小程序跳转传参的方法

    目的: 带着第一个页面的id,传到第二个页面,实现同一个页面,点击不同商品显示对应的数据 首先在第一个页面的js文件中写好接口 随后在wxml中写上点击事件,注意这个 data-id=\\\"{{item.id}}\\\" 随后在写上点击事件 先console一个e 看需要拿到什么数据  console的结果是 currentTarget下

    2024年02月06日
    浏览(36)
  • taro跳转页面传参的几种方式

    我之前在网上也搜了挺多taro传参的方式,这里我总结一下 路由跳转分Taro.navigateTo与Taro.redirectTo, 但是这两种方法只适用于传递少量参数 Taro.navigateTo跳转时是将新的页面加载过来,最多加载到10层,返回时去的是上一页; Taro.redirectTo跳转的同时将当前页面销毁,返回时去的是

    2024年02月07日
    浏览(34)
  • 【Vue3】路由传参的几种方式

    路由导航有两种方式,分别是:声明式导航 和 编程式导航 参数分为query参数和params参数两种 1.传参 在路由路径后直接拼接 ?参数名:参数值 ,多组参数间使用 分隔。 如果参数值为变量,需要使用模版字符串。 2.接收与使用 1.传参 to不再传递字符,而是传一个对象,由于参数

    2024年02月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包