#include <stdio.h>
// 函数声明
void reverseArray(int *arr, int size);
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
reverseArray(arr, size);
printf("Reversed array: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
// 函数定义
void reverseArray(int *arr, int size) {
int *start = arr;
int *end = arr + size - 1;
while (start < end) {
int temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
指针运算可能出现的错误及避免方法:
- 空指针解引用:如果传递给函数的数组指针为
NULL
,对其进行解引用操作(如 *arr
)会导致未定义行为。避免方法是在函数开始时对指针进行有效性检查,例如:
void reverseArray(int *arr, int size) {
if (arr == NULL) {
return;
}
// 后续代码
}
- 指针越界:在指针运算过程中,如果不小心超出了数组的边界,例如
start
或 end
指针移动到了数组范围之外,同样会导致未定义行为。通过确保 start
和 end
指针的移动始终在数组范围内,如上述代码中使用 while (start < end)
来避免指针越界。
- 指针类型不匹配:在进行指针运算时,确保所有指针类型一致。如果将不同类型的指针进行运算或赋值,可能会导致错误。例如,不能将
int *
类型的指针赋值给 char *
类型的指针并进行不恰当的运算。始终保证指针运算在同一类型的指针之间进行。