• 函数:计算数组的元素和


    一、计算数组的元素和

    参数传递给函数时,实际上只有数组的首地址作为指针传递给了函数。

    函数定义中的int a[ ]等价于int *a。在只有地址信息的情况下,是无法知道数组里有多少个元素的,因此在计算数组中的元素和时,要加一个参数——数组的元素个数。

    1. #include
    2. //#include
    3. #include
    4. int sum(int* a, int n) {
    5. int ans = 0;
    6. for (int i = 0; i < n; i++)
    7. ans += a[i];
    8. return ans;
    9. }
    10. /*在函数调用时,a不一定非要传递一个数组,例如:*/
    11. int main() {
    12. int a[] = { 1,2,3,4 };
    13. printf("%d\n", sum(a + 1, 3)); //利用指针的加减法把要开始相加元素的地址传给函数
    14. return 0;
    15. }

    一般地,若p是指针,k是正整数,则p+k就是指针p后面第k个元素,p-k是p前面的第k个元素,而如果p1、p2 是同类型的指针,则p2-p1是从p2到p1的元素个数(不含p2)

     二、计算左闭右开区间内的元素和

    写法一:

    1. #include
    2. //#include
    3. #include
    4. int sum(int* begin, int* end) {
    5. int n = end - begin;
    6. int ans = 0;
    7. for (int i = 0; i < n; i++)
    8. ans += begin[i];
    9. return ans;
    10. }
    11. /*测试函数————计算左闭右开区间内的元素和:*/
    12. int main() {
    13. int a[] = { 1,2,3,4 };
    14. printf("%d\n", sum(a + 1, a+3)); //利用指针的加减法把要开始相加元素的地址传给函数
    15. return 0;
    16. }

     写法二:更具一般性,用一个新指针p作为循环变量,同时累加其指向的值

    1. #include
    2. //#include
    3. #include
    4. int sum(int* begin, int* end) {
    5. int* p = begin;
    6. int ans = 0;
    7. for (int* p = begin; p != end; p++)
    8. ans += *p;
    9. return ans;
    10. }
    11. /*测试函数————计算左闭右开区间内的元素和:*/
    12. int main() {
    13. int a[] = { 1,2,3,4 };
    14. printf("%d\n", sum(a + 1, a+3)); //利用指针的加减法把要开始相加元素的地址传给函数
    15. return 0;
    16. }

    数组在传参时的注意点

    1. 数组传递的方式: 在C语言中,数组的传递通常使用指针来实现。当你传递一个数组作为函数参数时,实际上传递的是数组的首地址,也就是数组的第一个元素的地址。函数中可以通过指针来访问和修改数组中的元素。这种传递方式可以避免在内存中复制整个数组,提高了效率。

    2. 数组大小的传递:在函数中传递数组时,通常需要额外传递数组的大小信息,以便函数知道数组的长度。这样可以避免在函数内部发生数组越界的错误。可以通过传递数组大小作为参数,或者在数组的末尾使用一个特定的值来表示数组的结束。

    3. 数组的修改: 在函数中传递数组时,函数可以修改数组中的元素。这是因为数组传递的是数组的地址,函数可以通过指针来访问和修改数组中的元素。注意,在函数内部修改数组的元素会对原始数组产生影响。

    4. 数组的长度限制: 在C语言中,数组的长度是固定的,一旦定义了数组的大小,就不能再改变。因此,在传递数组时需要确保函数中不会越界访问数组。如果需要处理可变长度的数据,可以考虑使用动态内存分配(如“malloc”和“free”)来创建和释放数组。

    5. 数组的一维和多维传递:对于一维数组,可以直接将数组作为参数传递给函数。而对于多维数组,需要指定每个维度的大小,并使用适当的方式进行传递。可以使用指针或者使用数组指定每个维度的大小。

     参考书籍:《算法竞赛入门经典(第二版)》作者:刘汝佳

  • 相关阅读:
    Springboot 配置使用 Elasticsearch
    LeetCode_贪心算法_困难_630.课程表 III
    Qt自定义控件
    PS笔记2_钢笔工具的形状和路径
    携职教育:中级经济师备考超强攻略,亲测有效,拿走不谢
    如何封装一个实用的上传组件
    C++工程师面试模拟
    行业追踪,2023-10-20
    uniapp-css:拼图(不规则图片拼插)、碎片
    vue中使用wangeditor富文本编辑器
  • 原文地址:https://blog.csdn.net/2301_79218588/article/details/139372228