利用指针变量计算下标为奇数的数组的和(函数的方法实现)

44 阅读2分钟
#include <stdio.h>

方法1:利用for循环
特别注意,最好不要直接去使用形参中的指针变量,要用另外一个指针去接收一下,用另外一个指针去操作
核心原因:保持原始指针不变
1.1.  避免意外修改传入的指针  
    如果直接操作形参 p,函数内部对 p 的移动(如 p++)会改变原始指针的值。虽然在这个简单例子中影响不大,但在复杂程序中可能导致难以追踪的 bug。
2.1  代码可读性和维护性  
    使用局部指针变量(如 current或者p)能更清晰地表达"这是一个临时用于遍历的指针",而不是直接修改传入参数。
    

// 计算数组中奇数下标元素的和
int sum_odd_indices(int *arr, int len) {
    int sum = 0;
    // 从第1个元素(下标1)开始,每次跳过2个元素
    for (int *p = arr + 1; p < arr + len; p += 2) {
        sum += *p;
    }
    return sum;
}

int main() {
    int arr[] = {11, 22, 33, 44, 55, 66, 77, 88, 99};
    int len = sizeof(arr) / sizeof(arr[0]);
    
    int odd_sum = sum_odd_indices(arr, len);
    printf("数组中奇数下标的和为: %d\n", odd_sum);  // 输出: 22 + 44 + 66 + 88 = 220
    
    return 0;
}
//方法2:利用while循环
#include <stdio.h>

// 计算数组中奇数下标元素的和
int sum_odd_indices(int *arr, int len) {
    int sum = 0;
    int *p = arr + 1;  // 从第1个元素(下标1)开始
    int *end = arr + len;  // 结束位置
    
    while (p < end) {
        sum += *p;
        p += 2;  // 每次跳过2个元素
    }
    return sum;
}

int main() {
    int arr[] = {11, 22, 33, 44, 55, 66, 77, 88, 99};
    int len = sizeof(arr) / sizeof(arr[0]);
    
    int odd_sum = sum_odd_indices(arr, len);
    printf("数组中奇数下标的和为: %d\n", odd_sum);  // 输出: 22 + 44 + 66 + 88 = 220
    
    return 0;
}
#include <stdio.h>
下面的方式和上面的解法一致,主要的原因就是加了const,

// 计算数组中奇数下标元素的和
int sum_odd_indices(const int *arr, int len) {  // 用const保护原指针,
    int sum = 0;
    const int *current = arr + 1;  // 用临时指针current操作
    const int *end = arr + len;
    
    while (current < end) {
        sum += *current;
        current += 2;  // 移动临时指针
    }
    return sum;
}

int main() {
    int arr[] = {11, 22, 33, 44, 55, 66, 77, 88, 99};
    int len = sizeof(arr) / sizeof(arr[0]);
    
    int odd_sum = sum_odd_indices(arr, len);
    printf("数组中奇数下标的和为: %d\n", odd_sum);  // 输出: 220
    
    return 0;
}

image.png