MST

星途 面试题库

面试题:C语言指针运算高级难度题

编写一个函数,接受一个整数数组和数组大小作为参数,使用指针运算实现对数组元素逆序排列。要求在实现过程中避免常见的指针运算错误,并解释在这个过程中可能出现哪些指针运算方面的错误以及如何避免。
34.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#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--;
    }
}

指针运算可能出现的错误及避免方法:

  1. 空指针解引用:如果传递给函数的数组指针为 NULL,对其进行解引用操作(如 *arr)会导致未定义行为。避免方法是在函数开始时对指针进行有效性检查,例如:
void reverseArray(int *arr, int size) {
    if (arr == NULL) {
        return;
    }
    // 后续代码
}
  1. 指针越界:在指针运算过程中,如果不小心超出了数组的边界,例如 startend 指针移动到了数组范围之外,同样会导致未定义行为。通过确保 startend 指针的移动始终在数组范围内,如上述代码中使用 while (start < end) 来避免指针越界。
  2. 指针类型不匹配:在进行指针运算时,确保所有指针类型一致。如果将不同类型的指针进行运算或赋值,可能会导致错误。例如,不能将 int * 类型的指针赋值给 char * 类型的指针并进行不恰当的运算。始终保证指针运算在同一类型的指针之间进行。