C++数组学习

一、数组存储一个固定大小的相同类型元素的顺序集合。和vector相比,数组有以下几个特点:
1、数组大小确定不变,不能随意向数组中增加元素,但是损失了灵活性;
2、不能随意增加元素,则运行性能较好。
数组声明不是一个个单独变量声明,而是声明一个数组变量,特定元素通过索引来实现。并且所有的数组都是由连续的内存位置组成,最低的地址对应第一个元素,最高的地址对应最后一个元素。
数组元素是通过索引来访问。
std::setw()函数用来格式话输出。其中setw(13)表示紧随其后的值的字段宽度。
二、多维数组

type arrayName[x][y]其中x表示行,y表示列

三、指向数组的指针
使用数组名作为常量指针是合法的,反之*(n+4)是访问n[i]数据的合法方式

int main()
{
	double ba[5] = { 1000.0,2.0,3.4,17.0,50.0 };
	double* p;

	p = ba;


	cout << "使用指针的数组值 " << endl;
	for (int i = 0; i < 5; i++)
	{
		cout << "*(p + " << i << ") : " << *(p + i) << endl;
		cout << "(p + " << i << ") : " << (p + i) << endl;
	}

	cout << "使用ba作为地址的数组值 " << endl;
	for (int i = 0; i < 5; i++)
	{
		cout << "*(ba + " << i << ") : " << *(ba + i) << endl;
		cout << "(ba + " << i << ") : " << (ba + i) << endl;
	}

	system("pause");
	return 0;
}

使用指针和使用数组的数值和地址是一样的,运行的结果为
在这里插入图片描述
四、传递数组给函数
通过指定不带索引的数组名来传递指向数组的指针。(这句话好好品品)
将数组传给函数,数组类型自动转换成指针类型,因而传的实际是地址。
如果想在函数中传递一个一维数组作为参数,必须以下面三种方式来声明函数形式参数,三种方式是等价的,每种方式都会告诉编译器将要接收一个整型指针,同样也可以传递一个多维数组作为形式参数。
方式一
形式参数是一个指针:

void myFunction(int *param)
{}

方式二
形式参数是一个已定义大小的数组:

void myFunction(int param[10])
{}

方式三
形式参数是一个未定义大小的数组:

void myFunction(int param[])
{}

好好理解这段代码:

double getAverage(int arr[], int size);

int main()
{
	int balance[5] = { 1000,2,3,17,50 };

	double avg;

//	avg = getAverage(&balance[0], 5);
	avg = getAverage(balance, 5);

	cout << "avg = " << avg << endl;

	system("pause");
	return 0;
}

//double getAverage(int arr[], int size)
//double getAverage(int arr[10], int size)
double getAverage(int *arr, int size)

{
	int i, sum = 0;
	double avg;

	for (i = 0; i < size; i++)
	{
		sum += arr[i];
	}

	avg = double(sum) / size;
	return avg;
}

五、从函数返回数组
可以通过指定不带索引的数组名来返回一个指向数组的指针,另外C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量:

int* getRandom1()
{
	static int r[10];

	srand((unsigned)time(NULL));
	for (int i = 0; i < 10; i++)
	{
		r[i] = rand();
		cout << r[i] << endl;
	}

	return r;
}

int main()
{
	int* p;
	p = getRandom1();
	for (int i = 0; i < 10; i++)
	{
		cout << "*(p+" << i << ") : " << *(p + i) << endl;
	}

	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值