cpp 指针(2)—数组

206 阅读1分钟

这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战

int main()
{
	int aList[5] = { 2,3,5,7,9 };
	cout << aList << endl;
	system("pause>0");
	return 0;
}

在 c++ 声明一个数组变量,我们应该在声明时给出数组长度,以及给出数组元素类型。这样系统会根据用户请求来分配内存,这样好处就是省掉编译器很多工作,越多确定工作,在开始之前就确定下来,好处是后面会省很多事,所以速度也快。

然后我们输出一下 aList&aList[0] 看这两个输出结果都是一个地址,而且地址值相同,其实这一点对于从前端也好还是用 Java 后端的开发人员都有点 confusing。首先 aList 是一个变量,也是一个指针,指向存储数组第一个元素的地址。

cout << aList << endl;
cout << &aList[0] << endl;
cout << aList[2] << endl; 
cout << *(aList + 2) << endl;

那么我们如何通过 aList 来访问数组,其实可以通过[index]这种我们熟悉方式来访问数组。也可以通过指针方式来访问数组的元素,例如 aList + 2

for (int i = 0; i <=4; i++)
{
    cout << *(aList + i) << endl;

}
for (int i = 0; i <=5; i++)
{

        cout << *(aList + i) << " ";
}

如果输出范围大于数组索引范围,如果访问到一个地址超出数组的地址范围,则会返回如下

2 3 5 7 9 -858993460
int get_sum(int arr[]) {

	int sum = 0;
	int size = sizeof(arr)/sizeof(arr[0]);

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

	return sum;

}
int arr[] = {1,2,3,5,7};

int sum = get_sum(arr);

cout << "sum of arr = " << sum << endl;

大家在运行代码之前可以猜一猜 sum 的值,如果上面内容了解这个应该不难猜到,这个代码是对你对上面内容的检测。

接下里我们去通过两个getMingetMinAndMax这两个方法去实现一下来巩固一下我们数组。

int getMin(int numbers[], int size) {
	int min = numbers[0];
	for (int i = 1; i < size; i++)
	{
		if (numbers[i] < min)
			min = numbers[i];
	}

	return min;
}
cout << "Min is " << getMin(aList, 5) << endl;
void getMinAndMax(int numbers[], int size, int* min, int* max) {
	for (int  i = 1; i < size; i++)
	{
		if (numbers[i] > *max) {
			*max = numbers[i];
		}

		if (numbers[i] < *min) {
				*min = numbers[i];
		}
		
	}
}
int min = aList[0];
int max = aList[0];

getMinAndMax(aList, 5, &min, &max);

cout << "Min is " << min << "  and Max is " << max << endl;