#include <stdio.h>
#include <stdlib.h>
void reverseAndFree(int *arr, int n) {
// 指针运算实现逆序
int *start = arr;
int *end = arr + n - 1;
while (start < end) {
int temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
// 内存管理关键要点:释放动态分配的内存
free(arr);
}
int main() {
int n = 5;
int *arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
perror("malloc");
return 1;
}
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
reverseAndFree(arr, n);
return 0;
}
指针运算实现逆序说明
- 定义指针:使用
int *start = arr
指向数组的起始位置,int *end = arr + n - 1
指向数组的末尾位置。
- 交换元素:通过
while (start < end)
循环,在start
和end
相遇之前,交换start
和end
所指向的元素。每次交换后,start
指针向后移动一位(start++
),end
指针向前移动一位(end--
)。这样逐步将数组元素逆序排列。
内存管理关键要点
- 动态内存分配:在
main
函数中,使用malloc
分配了一块大小为n * sizeof(int)
的内存空间,并将返回的指针赋值给arr
。如果malloc
失败(返回NULL
),需要进行错误处理,这里使用perror
输出错误信息并返回。
- 内存释放:在
reverseAndFree
函数中,当数组元素逆序排列完成后,使用free(arr)
释放之前动态分配的内存。这一步至关重要,避免内存泄漏。确保在程序不再需要这块动态分配的内存时,及时释放它。