MST
星途 面试题库

面试题:C语言中const修饰指针的不同情况

在C语言中,const修饰指针有几种不同的形式,请分别举例说明,并阐述每种形式下指针和其所指向内容的可修改性。
39.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

在C语言中,const修饰指针有以下三种不同形式:

  1. 指针指向的内容不可修改,但指针本身可以修改
int main() {
    int num1 = 10, num2 = 20;
    const int *ptr = &num1;
    // *ptr = 15;  // 错误,不能通过指针修改其所指向的内容
    ptr = &num2;  // 正确,可以修改指针指向
    return 0;
}

在这种形式下,const修饰的是指针所指向的内容,意味着不能通过指针去修改它所指向的内存中的值,但指针本身可以指向其他地址。

  1. 指针本身不可修改,但指针指向的内容可以修改
int main() {
    int num1 = 10, num2 = 20;
    int *const ptr = &num1;
    *ptr = 15;  // 正确,可以修改指针所指向的内容
    // ptr = &num2;  // 错误,不能修改指针本身
    return 0;
}

这里const修饰的是指针本身,指针一旦初始化指向一个地址,就不能再指向其他地址,但可以通过指针修改其所指向的内容。

  1. 指针和指针指向的内容都不可修改
int main() {
    int num1 = 10;
    const int *const ptr = &num1;
    // *ptr = 15;  // 错误,不能通过指针修改其所指向的内容
    // ptr = &num2;  // 错误,不能修改指针本身
    return 0;
}

这种情况下,const既修饰了指针所指向的内容,又修饰了指针本身,所以既不能通过指针修改其所指向的内容,也不能修改指针指向其他地址。