1. 数组的定义:所谓数组就是用一个统一的名字代表这一批数据,而用序号和下标来区分各个元素,数组名就是这些数据的首地址,包含数字数组(标题2、3)和字符数组(标题4)
2. 一维数组
1)定义:类型 数组名[常量表达式],类型表示数组内的数据最小单位
2)初始化(定义的时候)
a.定义的时候全部赋值:a[3] = {1, 2, 3};
b.可以部分赋值,其他默认为0:a[4] = {1,2};
c.对全部赋初值,可以不指定数组长度:a[ ] = {1,2};
#include "stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
//fibonacci数列
//int main(int argc, char* argv[])
//{
// int i ; //定义性声明局部变量,类型为auto,动态存储空间
// int f[20] = {1,1};//数组,f[0] = 1,f[1] = 1,其他的为0
//
// for(i = 2; i < 20; i++)
// {
// f[i] = f[i-1] + f[i-1]; //fibonacci数列
// }
//
// for(i = 0; i < 20; i++)
// {
// if(i % 5 == 0)
// {
// cout << endl;
// }
// cout << setw(8) << f[i];//每个数据输出时占8列宽度
// }
// cout << endl;//最后执行一次换行
//
// return 0;
//}
//冒泡法
int main(int argc, char* argv[])
{
int i, j, temp;
int f[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};//定义是全部赋值,可以不指定数组长度
cout << "please input 10 numbers:" << endl;
for(i = 1; i < 11; i++)
{
cin >> f[i];
}
//从f[1]开始和2-10比较,从f[2]开始和3-10比较.....
for(i = 1; i < 11; i++)
{
for(j = i + 1; j < 11; j++)
{
if(f[i] < f[j])
{
temp = f[i];
f[i] = f[j];
f[j] = temp;
}
}
}
cout << "the sorted number:" << endl;
for(i = 1; i < 11; i++)
{
cout << f[i] << " ";
}
cout << endl;
return 0;
}
3. 二维数组
1)定义:类型 数组名[常量表达式][常量表达式]
a.C++中对二维数组int a[3][5];是这样处理:相当于定于了3个一维数组int a[0] [5], a[1] [5],a[2] [5];,此处a[0] , a[1] ,a[2] 作为一维数组名,数组元素的排列顺序是a[0][0],a[0][0],a[0][1],a[0][2],…a[2][4],这在后面指针的时候特别有用
2)初始化(定义的时候)
a.按行给数组全部赋值:a[2][3] = {{1, 2, 3},{ 4, 5, 6}};
b.按照数组元素的排列顺序在一个花括号内全部赋值a[2][3] = {1, 2, 3, 4, 5, 6};
c.对部分赋初值,其他为0:a[2][3] = {{1},{2,3}};
d.对全部赋初值,第一维可以不指定数组长度,第二维不可以省略数组长度:a[ ][2] = {1,2,3,4,5,6};
e.对部分赋初值,第一维可以不指定数组长度,第二维不可以省略数组长度,但是应该分行赋初值:a[ ][2] = {{1,2,3},{4};
int main(int argc, char* argv[])
{
int i, j, n = 0, m = 0, max;//n,m在赋值的时候初始化
//以下在定义的时候初始化二维数组均可以
int a[3][4] = {1, 3, 4, 12, 14, 3, 5, 6, 7, 8, 9, 10};
int b[3][4] = {{1, 3, 4, 12}, {14, 3, 5, 6}, {7, 8, 9, 10}};
int c[3][4] = {{1, 3, 4, 12}, {14}, {7, 8, 10}};
int d[][4] = {1, 3, 4, 12, 14, 3, 5, 6, 7, 8, 9, 10};
int e[][4] = {{1, 3, 4, 12}, {14}, {10}};
max = a[0][0];
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
if(a[i][j] > max)
{
max = a[i][j+1];
n = i;
m = j + 1;
}
}
}
cout << "max number is:" << max << endl;
cout << "row is:" << n << " " << "colum is" << m << endl;
return 0;
}
- 字符数组**(就是用来保存和处理字符串的,没有其他作用,看到char a[ ]就想到字符串)**
1)定义:和数字数组一样,但是每个元素要加’’;
2)初始化(定义的时候):和数字数组一致
3)以下是重点:!!!!!
字符数组、字符串(又叫字符串常量)、字符串结束标志(’\0’)
①字符数组可以存放字符串常量中的字符(包括可以显示的和不能显示是’\0’);
字符串常量“I am happy”在内存中c/c++编译系统会自动在可以显示的字符后面加上不能显示是’\0’;
②字符串结束标志(’\0’,空字符):很独特,c/c++规定’\0’是一个字符串的结束标志,由他前面的字符组成可以显示的字符串(或者叫有效字符串),所有和字符串相关的函数都是识别’\0’表示有效字符串的,遇到’\0’就停止了,如prinf,cout等
③字符数组初始化还有一种补充的方式:char a[ ] = {“I am happy”}或者char a[ ] = “I am happy”,但是注意a[ ]里面的内容是’I’,’ ‘, ‘a’,‘m’,’ ‘,‘h’,‘a’,‘p’,‘p’,‘y’,’\0’,具体看①中对字符串在内存中的模型;
④人们为了适应c/c++编译系统,也照葫芦画瓢在字符数组中有效字符后面加一个’\0’,如char str[ ] = {‘c’, ‘h’, ‘i’, ‘n’, ‘a’, ‘\0’};这么做的目的我觉得是方便使用prinf等函数。
⑤注意操作的字符串千万不要大于字符数组,或内存溢出,破坏其他数据;
⑥字符串处理的相关函数:如strcat函数的声明:strcat(char[ ],const char[ ] ),加const表示这个字符数组拼接到前一个的后面,而不改变const char[ ] 中的内容(插一句为什么声明中的形参char[ ]是这样,见以前对函数声明的讲解,或者见下面程序)。
- C++中关于字符串的处理
1)c-string:这是C语言对字符串的处理方式,字符串总是和字符数组联系在一起;
2)string:C++的方式,使用string类,定义一个类变量(学名叫对象)。 - 数组作为函数参数
1)定义:常量和变量可以作为函数的实参,同样数组元素也可以作为函数的 实参,用法和变量相同,数组名也可以作为实参和形参,传递的是数组的地址。
2)数组元素作为实参:用法和变量一样
3)数组名作为实参:用法和指针一样
//冒泡法
int main(int argc, char* argv[])
{
//函数声明,第1个参数表示形参是1个数组,所以实参也应该是1个数组名或者指针,它接收的是1个地址值
//int array[]表明是一个数组名,不是普通变量如int array
//写成void select_sort(int array[5], int n);是一样的,具体参考之前关于函数声明作用的说明
//写成void select_sort(int [], int n);是一样的,具体参考之前关于函数声明作用的说明
//写成void select_sort(int [5], int n);是一样的,具体参考之前关于函数声明作用的说明
void select_sort(int array[], int n);
int i;
int f[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};//定义是全部赋值,可以不指定数组长度
cout << "please input 10 numbers:" << endl;
for(i = 0; i < 10; i++)
{
cin >> f[i];
}
cout << endl;
select_sort(f, 10);
cout << "the sorted number:" << endl;
for(i = 0; i < 10; i++)
{
cout << f[i] << " ";
}
cout << endl;
return 0;
}
//array和a代表同一块内存空间,所以array指向的内容变了,a指向的内容也变了
void select_sort(int array[], int n)
{
int i, j, temp;
//从f[0]开始和1-9比较,从f[1]开始和2-9比较.....
for(i = 0; i < 10; i++)
{
for(j = i + 1; j < 11; j++)
{
if(array[i] < array[j])
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}