您的位置:首页 > 娱乐 > 明星 > 【C++ Primer Plus学习记录】函数和数组

【C++ Primer Plus学习记录】函数和数组

2024/10/6 18:34:19 来源:https://blog.csdn.net/qq_39072304/article/details/140108755  浏览:    关键词:【C++ Primer Plus学习记录】函数和数组

假设使用一个数组来记录家庭野餐中每人吃了多少个甜饼(每个数组索引都对应一个人,元素值对于这个人所吃的甜饼数量)。现在想知道总数。这很容易,只需要使用循环将所有数组元素累积起来即可。将数组元素累加是一项非常常见的任务,因此设计一个完成这项工作的函数很有意义。这样就不必在每次计算数组总和时都编写新的循环了。

考虑函数接口所涉及的内容。由于函数计算总数,因此应返回答案。如果不分吃甜品,则可以让函数的返回类型为int。另外,需要知道要对哪个数组进行累计,因此需要将数组名作为参数传递给它。为使函数通用,而不限于特定长度的数组,还需要传递数组长度。这里唯一的新内容是,需要将一个形参声明为数组名。下面来看一看函数头及其他部分:

int sum_arr(int arr[],int n);arr = array name,n = size

这看起来似乎合理。方括号[]指出arr是一个数组,而方括号[]为空则表明,可以将任何长度的数组传递给该函数,但实际情况并非如此:arr实际上并不是数组,而是一个指针。好消息是,在编写函数的其余部分时,可以将arr看作是数组。首先,通过一个示例验证这种方法可行,然后看看它为什么可行。

程序清单7.5演示如同使用数组名那样使用指针的情况。程序将数组初始化为某些值,并使用sum_arr()函数计算总数。注意到sum_arr()函数使用arr时,就像是使用数组名一样。

#if 1
#include<iostream>
using namespace std;const int ArSize = 8;int sum_arr(int arr[], int n);int main()
{int cookies[ArSize] = { 1, 2, 4, 8, 16, 32, 64, 128 };int sum = sum_arr(cookies, ArSize);cout << "Total cookies eaten: " << sum << "\n";system("pause");return 0;
}int sum_arr(int arr[], int n)
{int total = 0;for (int i = 0; i < n; i++)total = total + arr[i];return total;
}
#endif

C++将数组名解释为其第一个元素的地址:

cookies == &cookies[0];

函数调用sum_arr(cookies,ArSize)将cookies数组的第一个元素的地址和数组中的元素数目传递给sum_arr()函数。sum_arr()函数将cookies的地址赋给指针变量arr,将ArSize赋给int变量n。这意味着,程序清单7.5实际上并没有将数组内容传递给函数,而是将数组的位置(地址)、包含的元素种类(类型)以及元素数目(n变量)提交给函数。有了这些信息后,程序便可以使用原来的数组。传递常规变量时,函数将使用该变量的拷贝;但传递数组时,函数将使用原来的数组。实际上,这种区别并不违反C++按值传递的方法,sum_arr()函数仍传递了一个值,这个值被赋给一个新变量,但这个值是一个地址,而不是数组的内容。

为将数组类型和元素数量告诉数组处理函数,请通过两个不同的参数来传递它们:

int sum_arr(int arr[],int n);

而不要试图使用方括号表示法来传递数组长度:

int sum_arr(int arr[n]);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com