C/C++ 函数如何使用指针来处理数组

在大多数情况下,c++和C语言一样,也将数组名视为指针。另外C++将数组名解释未其第一个元素的地址。
    int cookies[10];
    其中cookies = &cookies[0] // 数组名时第一个元素的地址
    
    该规则有一些例外。
    首先,数组声明使用数组名来标记存储位置;
    其次,对数组名使用sizeof将得到整个数组的长度(以字节为单位);
    第三,将地址运算符&用于数组名时,将返回整个数组的地址。
    
    int sum = sum_arr(cookies, ArSize);
    其中cookies是数组名,而根据C++规则,cookies是其第一个元素的地址,因此函数传递的是地址。由于数组的元素的类型为int,因此cookies的类型必须是int指针,即int*。这表明,正确的函数头应该是这样的。
    int sum_arr(int* arr, int n) // arr是数组的名字,n是数组大小
    
    其中用int* arr替换了int arr[]。 这证明这两个函数头都是正确的,因为在C++中,当(且仅当)用于函数头或函数原型中,int*和int arr[]的含义才是相同的。它们都意味着arr是一个int指针。然而,数组表示法(int arr[])提醒用户,arr不仅指向int,还指向int数组的第一个int。更多情况下为了使用不易混淆,我们将当指针指向数组的第一个元素时,使用数组表示法;而当指针指向一个单独的值时,使用指针表示法。

示例源码:

// Len_array.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include 
using namespace std;

int sum_arr1(int* arr, int n)
{
	int sum = 0;
	for (int i = 0; i < n; i++)
	{
		sum = sum + arr[i];
	}
	return sum;
}
int sum_arr2(int arr[], int n)
{
	int sum = 0;
	for (int i = 0; i < n; i++)
	{
		sum = sum + arr[i];
	}
	return sum;
}

int main()
{
	int cookies[10] = { '0' };
	for (int i = 0; i < 10; i++)
	{
		cookies[i] = rand()%10;
	}

	printf("\n原始数据:");
	for (auto i : cookies)
		cout << i << " ";

	int sum1 = sum_arr1(cookies, 10);
	printf("\n\n使用sum_arr1:%d", sum1);
	
	int sum2 = sum_arr1(cookies, 10);
	printf("\n\n使用sum_arr2:%d", sum2);
}

执行结果:

C/C++ 函数如何使用指针来处理数组_第1张图片

你可能感兴趣的:(C/C++学习,java,算法,数据结构)