面试题答案
一键面试- 错误:
- 指针
ptr
在数组arr
的基础上偏移了10个int
类型的位置。数组arr
只有5个元素,偏移10个位置后,ptr
指向了数组arr
之外的内存区域,这是非法的内存访问,会导致未定义行为。
- 指针
- 原因:
- 数组
arr
的有效索引范围是从0到4。当执行ptr = ptr + 10;
时,ptr
超出了数组arr
所分配的内存范围,访问该位置的数据没有意义且不安全。
- 数组
- 改正方法:
- 确保指针的偏移在数组的有效范围内。例如,如果要访问数组中的下一个元素,可以将偏移量改为1:
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
ptr = ptr + 1; // 合法偏移,指向数组的第二个元素
printf("%d", *ptr);
return 0;
}
这样修改后,ptr
指向数组arr
的第二个元素,程序能正确输出2。