数组与函数
创建一个数组
数组(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);
。