C++基础 数组(二)

参考

C++ Primer Plus (第6版)

函数与数组

数组作为函数参数
数组作为形参
#include <iostream>

using namespace std;

/*
	n为数组的长度,sizeof 一个指针 是得不到数组的长度, 需要传入数组的长度
*/
int sum_arr(int arr[], int n) 
{
	int total = 0;
	for (int i = 0; i < n; i++)
	{
		total += arr[i];
	}
	return total;
}

int main()
{
	int cookies[8] = { 1,2,4,8,16,32,64,128 };
	cout << sum_arr(cookies, 8) << endl; // 255

	system("pause");
	return 0;
}

在c++规则中,cookies是其第一个元素的地址,也就是在

	sum_arr(cookies, 8)

第一个参数传入的参数是一个数组的地址,那么这表明正确写法应该是

	int sum_arr(int* arr, int n)

在c++中,当且仅当用于函数头或函数原型中,int *arr 和 int arr[] 的含义相同,都是指向一个int指针(java不同,且定义数组不要和c++弄混)

数组名和指针对应好处: 作为参数,可以节省复制整个数组的时间和内存
数组名和指针对应坏处: 原始数据会被破坏,用const防止破坏

	
void show_array(double* arr, int n)
{
	arr[0] += 10;
}

int main()
{
	double constArray[2] = { 12,13 };
	show_array(constArray, 2);
	for (int i = 0; i < 2; i++)
	{
		cout << constArray[i] << endl; // 22,13
	}
}

用const ,如果对数组进行修改操作,编译器会禁止这么做
在这里插入图片描述
不需要传入数组长度,也就是把数组起始地址和结束地址为参数传入函数

#include <iostream>

using namespace std;

int sum_arr(const int* begin, const int* end)
{
	const int* ptr = begin;
	int total = 0;
	for (; ptr != end; ptr++)
	{
		total += *ptr;
	}
	return total;
}

int main()
{
	
	int cookies[8] = { 1,2,4,8,16,32,64,128 };
	cout << sum_arr(cookies, cookies + 8) << endl; // 255
	
	system("pause");
	return 0;
}

数组为二维数组
跟一维数组同理,参数也就是指针指向数组
在c++中,当且仅当用于函数头或函数原型中,int (arr)[i] 和 int arr[][i] 的含义相同,都是指向一个int[i]指针,不要忘记给arr加上括号,不然就是i个指向int的指针

#include <iostream>

using namespace std;

int sum(int(*ar2)[4], int size)
{
	int total = 0;
	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			total += ar2[i][j];
		}
	}
	return total;
}

int sum2(int ar2[][4], int size)
{
	int total = 0;
	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			total += ar2[i][j];
		}
	}
	return total;
}

int main()
{
	int data[3][4] = { {1,2,3,4},{5,6,7,8},{2,4,5,6} };

	cout << sum(data, 3) << endl;	// 53
	cout << sum2(data, 3) << endl;	// 53
	
	system("pause");
	return 0;
}
数组作为函数的返回值

返回值也就是指针,推荐参数引用
不然容易出现问题,比如
在函数内定义静态数组,出了函数,return的指针就释放了

上一篇:c++基础 数组(一)
下一篇:c++基础 数组(三)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值