MST

星途 面试题库

面试题:C语言指针运算中等难度题

请指出以下C语言代码中指针运算可能存在的错误,并说明原因及改正方法。 ```c #include <stdio.h> int main() { int arr[5] = {1, 2, 3, 4, 5}; int *ptr = arr; ptr = ptr + 10; printf("%d", *ptr); return 0; } ```
11.0万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 错误
    • 指针ptr在数组arr的基础上偏移了10个int类型的位置。数组arr只有5个元素,偏移10个位置后,ptr指向了数组arr之外的内存区域,这是非法的内存访问,会导致未定义行为。
  2. 原因
    • 数组arr的有效索引范围是从0到4。当执行ptr = ptr + 10;时,ptr超出了数组arr所分配的内存范围,访问该位置的数据没有意义且不安全。
  3. 改正方法
    • 确保指针的偏移在数组的有效范围内。例如,如果要访问数组中的下一个元素,可以将偏移量改为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。