基本知识:
定义:有限个同类型变量的无序集合
数组名:集合的名称
数组元素:组成数组的各个变量
数组元素在内存中是连续分配的,一个元素与首元素的位置差值 称为该元素的下标
数组长度:元素的个数
特点:随机访问,通过数组名和下标可以快速定位到该下标对应的位置,操作该数组元素
数组的定义格式与内存分配:
声明数组名、数组类型、元素个数
格式:数据类型 数组名【数组长度】
①数据类型:数组中元素的数据类型,所有元素都是同一数据类型
②数组名:一组连续存放于内存的数据的首地址(起始地址)
③系统按照定义的数据类型和数组长度分配一段连续的内存空间,数组名对应首地址,通过数组名以及数组元素的下标操作具体的元素
④数组在程序运行中不能改变数组所占内存大小,因此要在定义时留出足够大的数组长度
⑤程序中多处用到数组长度,因此一般将数组长度用const声明为符号常量
Const int N = 5
Int a[N]
数组定义的长度与实际元素的个数:规定数组长度必须是整型常量,在实际应用中,必须先定义一个较大的数组,然后用一个变量定义数组的实际长度,通过更改变量的值来控制数组元素的实际个数。
Int N = 100;
Int a[N]; //分配了100个int型的内存单元 0~99
Int n = 10;//实际操作0~9元素,后面的90个元素空闲,是随机值或0
Int n = 20;
当n==N时,数组已满,不能再增加元素
一维数组的初始化:
格式:数据类型 数组名【数组长度】={初始化列表};
初始化列表中的值用逗号分开,按顺序写入数组的元素中,初始化有多种方式
①数组元素全部初始化:int a[5]={1,2,3,4,5}
②数组元素部分初始化:int[5]={1,2,3}剩余的两个元素值为0
③不指定元素个数,根据初始值列表中的元素个数确定数组的长度,int a[]={1,2,3,4,5}, 数组长度为5
数组元素的使用:
数组中的每个变量称为数组元素,每个数组元素与数组名(首地址)的距离称为下标。数组元素的表示形式是“数组名【下标】”称为下标法
注意:①数组长度为5,则数组元素下标为0、1、2、3、4,数组长度为N,数组下标 的最小值是0,最大值是N-1,一旦超出范围,则成为越界,编译器检查不出来,但是 运行时会出现异常。
②【】存在两种用法。一:在定义时,定义数组大小,指明数组中包含多少元素,系统要分配多大内存。二:代表具体数组元素,a[0]、a[1]表示不同数组元素(变量)一般使用循环访问数组元素
数组的输入与输出:数组名代表一组连续存储的变量的首地址,数组的输入与输出都是对一组相同类型的数据(数组元素)的操作,要使用循环语句
Const int N = 10;
Int a[N];
数组的输入语句
For(int i=0;i
Cin>>a[i];
数组的输出语句
For(int i=0;i
一维数组与函数
一维数组作为函数的形参:至少要有两个参数①数组的形参定义,与声明数组类似,但是不用写长度。Int[]表示一个包含若干个int型元素的数组②数组的长度定义,是一个int型变量
输出int型数组下标为0~n-1的元素的值
Void output(int a[],int n)
{
For(int i=0;i
}
调用语句如下:
Int a[5]={1,2,3,4,5};
Output(a,5);
函数的址传递:使用简单变量作为参数是值的传递;数组作为参数时,是将数组元素的内存地址传给函数的形参,因此函数内部的形参通过实参的首元素地址和下标找到实参元素,是地址引用。
地址在计算机中又称为指针,形参是保存地址的变量,称为指针变量
函数定义内部修改形参数组的元素值,实际上修改的是实参数组的值
形参是数组时,一般第一个实参是数组名,第二个实参是数组实际长度n,表示从数组 的首元素开始操作的所有值。
实参也可以是数组中的任何一个地址,形参数组从实参地址开始,访问实参的n个元 素
注:形参的数据类型必须与与实参的数据类型相同。
因为形参是通过地址的值访问实参的数组元素,地址+1指的是地址+1*sizeof(数组 元素的数据类型),计算机中不同数据类型的内存大小及存储方式不同,必须保证 两者采用相同的数据类型
注意:数组越界问题
切记数组的实际长度,可以增加限定条件判断数组是否已满,是否访问越界,不访问数组之外的内存区域
字符数组与函数:
遍历数组时,不需要利用数组长度,而是判断元素的值等不等于‘\0’
字符串数组作为函数的参数时,一般只需要字符数组形参变量即可,调用时实参使用 字符数组首地址或者字符串
#include
using namespace std;
int length(char s[]);
int main()
{
char str[]="hello";
cout<
如果要执行cout<
1)将实参”abc”强制转换为字符数组 cout<
2)修改length函数的形参变量为const字符数组: int length(const char s[])
2.数组作为函数的返回值
函数的返回值可以是基本的数据类型,也可以是一个地址。形参数组的值实际上是实参 数组元素的首地址。如果要返回数组,使得函数返回值是数组的首地址,就可以实现将 函数表达式作为另一个函数调用的实参功能
数组作为函数的返回值时,函数定义及函数声明的返回值类型是:
数据类型*
调用函数时,函数表达式可以写到其他表达式中,或作为函数的实参
字符串与数值型的转化
Itoa整型转换为字符串
ltoa长整型转换为字符串
ultoa无符号长整型转换为字符串
三个函数原型相同 第一个参数:要转换的数值
第二个参数:用于保存转换后的字符串的字符数组首地址
第三个参数:转换的基数 例:十进制的技术就是10
使用gcvt函数将浮点数转换为字符串
第一个参数:要转换的数值
第二个参数:有效数字位数 如果位数过小用科学计数法表示
第三个参数:用于保存转换后的字符串的字符数组的首地址
注意:字符数组足够大
2.字符串转换为数值的函数cstdlib中有字符串转换为数值的函数
Atoi 字符串转换为整数
atof字符串转化为浮点数
仅包含一个参数,是字符数组的首地址
3.用C语言的通用函数实现数值与字符串的转化P191-192
Sprantf
sscanf
#include
#include
using namespace std;
int main()
{
int n=12345;
char a[10];
itoa(n,a,10);//整型转换为字符串
cout<
#include
using namespace std;
int main()
{
double f=123.45;
char a[10];
gcvt(f,5,a);//将浮点型转换为字符串
cout<
#include
using namespace std;
int main()
{
char a[10]="3456.46";
int na;
na=atoi(a);
cout<