C++ 学习笔记(三) 函数->C++数字->C++数组->C++字符串

一、C++函数

每个 C++ 程序都至少有一个函数,即主函数 main() 。
出现原因: 如果将所有代码都写到main()函数中,这样不仅使代码可读性差,修改代码时也很麻烦,而如果将main()函数中实现某个功能的代码块抽出来,形成一个子函数,如此可大大提高写代码效率。
除了以上提出的子函数,程序中还有很多便利的内置函数。例如,strcat()函数用来连接两个字符串。

1.定义函数格式:
返回类型  函数名 ( 形式参数)
{
     函数主体(实现某个功能)
}

返回类型:一个函数可以返回一个值。有些函数执行完操作后不需要返回值,在这种情况下,返回类型是关键字 void。
函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
参数:参数就像是占位符。当函数被调用时,传递一个值给了形式参数。参数是可选的,也就是说,函数可能不包含参数。
函数主体:函数主体包含一组定义函数执行任务的语句。
经典实例:

// 函数返回两个数中较大的那个数
 
int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}
2.函数声明

函数声明会告诉编译器函数名称及如何调用函数。
格式:

返回类型  函数名  (形参) ;

对于上面定义的函数 max(),以下是函数声明:

int max(int num1, int num2);
3.调用函数

写好函数后,不知道如何调用函数,那可不行!
调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。例如:

#include <iostream>
using namespace std;
 
// 函数声明
int max(int num1, int num2);
 
int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
   int ret;
 
   // 调用函数来获取最大值
   ret = max(a, b);
 
   cout << "Max value is : " << ret << endl;
 
   return 0;
}
 
// 函数返回两个数中较大的那个数
int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

编译后打印:

Max value is : 200
4.函数参数

函数参数分两种:
1.形式参数:进入函数时被创建,退出函数时被销毁。
2.实际参数:传递给函数的值有以下三种类型:
在这里插入图片描述

5.Lambda 函数

Lambda 函数定义:

[capture] (parameters) mutable ->return-type {statement};

(1) [capture]: 捕捉列表。捕捉列表出现在lambda函数的开始处。其中,[]是lambda引出符(即独特的标志符)
  编译器根据该引出符判断接下来的代码是否是lambda函数
  捕捉列表能够捕捉上下文中的变量以供lambda函数使用
  捕捉列表由一个或多个捕捉项组成,并以逗号分隔,捕捉列表一般有以下几种形式:

<1> [var] 表示值传递方式捕捉变量var

<2> [=] 表示值传递方式捕捉所有父作用域的变量(包括this指针)

<3> [&var] 表示引用传递捕捉变量var

<4> [&] 表示引用传递捕捉所有父作用域的变量(包括this指针)

<5> [this] 表示值传递方式捕捉当前的this指针

<6> [=,&a,&b] 表示以引用传递的方式捕捉变量 a 和 b,而以值传递方式捕捉其他所有的变量

<7> [&,a,this] 表示以值传递的方式捕捉 a 和 this,而以引用传递方式捕捉其他所有变量
(2)(parameters):参数列表。与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号()一起省略
(3)mutable : mutable修饰符。默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性(下面有详解)在使用该修饰符时,参数列表不可省略(即使参数为空)
看以下实例:

#include <iostream>
using namespace std;

int main(){
    int a = 10;
    auto func1 = [=](){return a + 1;};
    auto func2 = [=]()mutable{return a + 1;};
    auto funt3 = [&]
    {
    	a++;
    	return a;
    }
    cout << func1() << endl;
    cout << func2() << endl;
    a++;
    cout << func1() << endl;
    cout << func2() << endl;
    cout << func3() <<endl;
    return 0;
}

打印出:

11
12
11
13
12

为什么,第三行打印11?
lambda函数总是一个const函数,所以第三行打印11。
而加上mutable之后,取消了常量性,a可以在lambda函数体内改变,但不影响lambda表达式外面的a的值(所以最后一行打印12)。

(4)->return-type : 返回类型。用追踪返回类型形式声明函数的返回类型。
不需要返回值的时候也可以连同符号->一起省略
此外,在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导
(5){statement} : 函数体。内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量

(二)、C++数字

1.C++内置的一些数学函数

使用前需要先引用数学头文件
在这里插入图片描述

2.产生随机数

关于随机数生成器,有两个相关的函数。
一个是 rand(),该函数只返回一个伪随机数。生成随机数之前必须先调用 srand() 函数。
下面实例中使用了 time() 函数来获取系统时间的秒数,通过调用 rand() 函数来生成随机数:

#include <iostream>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
int main ()
{
   int i,j;
 
   // 设置种子
   srand( (unsigned)time( NULL ) );
 
   /* 生成 10 个随机数 */
   for( i = 0; i < 10; i++ )
   {
      // 生成实际的随机数
      j= rand();
      cout <<"随机数: " << j << endl;
   }
 
   return 0;
}

(三)C++数组

1.声明数组:
type arrayName [ arraySize ];
int balance[10];  //声明了一个可存放10个整型数的数组
2.初始化数组
int balance[10]={0,1,2,3,4,5,6,7,8,9} ;
int balance1[]={1,2,3}; //如果省略掉了数组的大小,数组的大小则为初始化时元素的个数。
3.访问数组元素

数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。
注意:索引从0开始。
例如,balance[5]指的是访问数组第六个元素

4.数组其它概念

以上讲的是最简单的一维数组理解完之后可理解以下概念:
在这里插入图片描述

(四)C++字符串

C++ 提供了以下两种类型的字符串表示形式:
1.C 风格 字符串
2.C++ 引入的 string 类类型

1.C 风格 字符串

C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。
因此,
C语言中的以下的内含函数仍支持使用:
注意:使用前应先加入头文件
在这里插入图片描述
看以下代码实例:

#include <iostream>
#include <cstring>
 
using namespace std;
 
int main ()
{
   char str1[11] = "Hello";
   char str2[11] = "World";
   char str3[11];
   int  len ;
 
   // 复制 str1 到 str3
   strcpy( str3, str1);
   cout << "strcpy( str3, str1) : " << str3 << endl;
 
   // 连接 str1 和 str2
   strcat( str1, str2);
   cout << "strcat( str1, str2): " << str1 << endl;
 
   // 连接后,str1 的总长度
   len = strlen(str1);
   cout << "strlen(str1) : " << len << endl;
 
   return 0;
}
2.C++中String类

C++ 标准库提供了 string 类 类型,支持上述所有的操作,另外还增加了其他更多的功能。
看一下代码讲解:

#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
   string str1 = "Hello";
   string str2 = "World";
   string str3;
   int  len ;
 
   // 复制 str1 到 str3
   str3 = str1;
   cout << "str3 : " << str3 << endl;
 
   // 连接 str1 和 str2
   //方法一:
   str3 = str1 + str2;
   cout << "str1 + str2 : " << str3 << endl;
   //方法二:
   str1.append(str2);
   cout << str1<<endl;
   
   // 连接后,str3 的总长度
   len = str3.size();//先暂且记住,等学了类和对象后便可知缘由
   cout << "str3.size() :  " << len << endl;
 
   return 0;
}

除此之外,还有很多其它便利的内置函数,可参考以下网站:https://blog.csdn.net/qq_37941471/article/details/82107077

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mandela688

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值