MST

星途 面试题库

面试题:C语言指针常量在函数参数中的应用

假设有一个函数`void modifyArray(int *const ptr, int size)`,请解释这个函数参数中指针常量的意义。并且编写完整代码,在`main`函数中调用这个函数,通过指针常量修改数组元素,展示其在实际场景中的特性和限制。
30.4万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 指针常量的意义
    • 在函数void modifyArray(int *const ptr, int size)中,int *const ptr表示ptr是一个指针常量。这意味着指针ptr本身的值(即它所指向的内存地址)不能被修改,但通过该指针所指向的内存位置的值是可以修改的。也就是说,一旦ptr被初始化指向某个内存地址,它就不能再指向其他地址了,但可以修改它所指向的地址处的内容。
  2. 完整代码如下
#include <stdio.h>

void modifyArray(int *const ptr, int size) {
    for (int i = 0; i < size; i++) {
        *(ptr + i) = *(ptr + i) * 2; // 通过指针常量修改数组元素
    }
    // 以下代码会报错,因为ptr是指针常量,不能修改其指向的地址
    // ptr = ptr + 1; 
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    modifyArray(arr, size);
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

在上述代码中,modifyArray函数接受一个指向int类型的指针常量ptr和数组的大小size。在函数内部,可以通过指针ptr修改数组元素的值,将每个元素乘以2。而如果尝试修改ptr本身的指向(例如ptr = ptr + 1;),编译器会报错,体现了指针常量在实际场景中的限制。在main函数中,创建了一个数组并调用modifyArray函数,然后输出修改后的数组元素。