C++ Primer Plus 预习(二) 数组与函数

数组与函数

创建一个数组

数组(array)是一种数据类型,用于储存多个同类型的的值,它们在计算机的内存中按地址连续储存。数组的创建和使用方式如下:

int a[5]; //创建有5个元素,数据类型为int的数组
double b[] = {1, 2.5, 3.5, 6}; //创建有4个元素,数据类型为double的数组

a[0] = 1; //给数组a的第一个元素赋值

数组声明时要注意,必须有数据类型数组变量名元素的个数(上面的第二个例子隐式地给出了数组的元素个数:4),必须给出元素个数的原因是,数组一旦创建,元素数量就确定并且无法更改,所以:

//int n = 6; 在有些编译器中会出错,因为n是变量,数组的元素个数需要确定
const int n = 6; //把变量更改为常量就不会出错
int array[n];
  • 数组的下标
    假设定义了一个有n个元素的数组,那么调用数组的1到n个元素时,所对应的下标依次是0到n-1,即array[0]表示第一个元素,array[n-1]表示最后一个元素。
  • 数组的初值问题
    数组和变量一样,需要赋初值才能使用。注意,如果用 int array[10] = {1}; 的方法赋初值,那么array[0]的值是1,剩下的元素的值都为0,如果用 int array[10]; ,那么数组中元素的值将是未知的。

函数

计算机语言强调代码的重用性,写代码的时候很忌讳写重复功能的代码,比如我们现在需要实现求三个数平均数的功能,我们可以这样写:

#include <iostream>
using namespace std;
void average(int a, int b, int c) //求三个整数平均值的函数
{
    cout << (a + b + c) / 3.0 << endl;
}
int main()
{
    average(1,2,3); //输出2
    average(5,6,7); //输出6

    return 0;
} 

其中average(int a, int b, int c)就是一个函数,函数的构成是:

returnType function(pType p1, pType p2,...)
{
    ...
}

其中returnType表示返回值的类型,在上面的average函数中什么也没有返回,所以是void;function是函数名;p1,p2是函数的参数,一定要加 参数的数据类型 pType,参数个数可以为0到任意个。
一般来说我们都会使用平均数的值,而不是将它简单的输出,所以对代码做如下修改:

#include <iostream>
using namespace std;
double average(int a, int b, int c) //求三个整数平均值的函数
{
    return (a + b + c) / 3.0;
}
int main()
{
    double ave = average(2,3,7);
    cout << ave << endl; //输出4

    return 0;
} 

现在的函数就有返回值了,是double类型的,所以把原来的函数返回类型由void改为double。在这时调用函数,会返回一个double类型的变量,需要用一个double类型的变量进行接收(上面用ave接收),或者直接输出,否则函数的调用就是没有意义的。

  • 函数调用时,是将参数的值传进函数的,称为值传递,所以只是将参数的值复制一份进入函数,并不会改变参数所对应变量的值,看如下代码:
#include <iostream>
using namespace std;
int func(int a)
{
    a = a / 2;
    return a;
}
int main()
{
    int a = 9;
    cout << func(a) << endl; //输出4
    cout << a << endl; //仍输出9

    return 0;
} 

函数中看似对a的值进行了改变,但函数调用仅仅是值传递,并不会改变参数的值,所以上面的调用 func(a) 等价于 func(9) ,并不会影响到a的值。

  • 函数调用之前一定要先定义或声明好,否则编译系统将会识别不出来函数名。有时,由于函数体过于庞大,我们会把函数的定义放在主函数之后,那么就需要在主函数前先声明函数,函数的声明直接复制函数定义的第一行即可,如上面的average函数也可以写成这样:
#include <iostream>
using namespace std;
double average(int a, int b, int c); //函数average的声明
int main()
{
    double ave = average(2,3,7);
    cout << ave << endl; //输出4

    return 0;
} 
double average(int a, int b, int c) //函数average的定义
{
    return (a + b + c) / 3.0;
}

函数的声明可以只写参数类型,比如上面的声明也可以写成 double average(int, int, int);

猜你喜欢

转载自blog.csdn.net/qq_37876210/article/details/82108768
今日推荐