c++数字数组、字符数组(字符串)、数组作函数参数-lesson6

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;
}
  1. 字符数组**(就是用来保存和处理字符串的,没有其他作用,看到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[ ]是这样,见以前对函数声明的讲解,或者见下面程序)。

在这里插入图片描述

  1. C++中关于字符串的处理
    1)c-string:这是C语言对字符串的处理方式,字符串总是和字符数组联系在一起;
    2)string:C++的方式,使用string类,定义一个类变量(学名叫对象)。
  2. 数组作为函数参数
    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;
			}
		}
	}
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值