#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;
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);
return 0;
}
#include <stdio.h>
int sum_odd_indices(int *arr, int len) {
int sum = 0;
int *p = arr + 1;
int *end = arr + len;
while (p < end) {
sum += *p;
p += 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);
return 0;
}
#include <stdio.h>
下面的方式和上面的解法一致,主要的原因就是加了const,
int sum_odd_indices(const int *arr, int len) {
int sum = 0;
const int *current = arr + 1;
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);
return 0;
}
