MST

星途 面试题库

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

在C语言中,const修饰指针有几种不同的写法,比如`const int *p`、`int * const p` 、`const int * const p`,请分别解释它们的含义,并举例说明在实际使用中会有哪些限制?
31.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. const int *p
    • 含义:这表示指针p所指向的int型数据是常量,即不能通过p去修改它所指向的值。但是指针p本身的值(即它所指向的地址)是可以改变的。
    • 实际使用限制举例
#include <stdio.h>
int main() {
    int a = 10;
    int b = 20;
    const int *p = &a;
    // *p = 15;  // 错误,不能通过p修改它所指向的值
    p = &b;  // 正确,可以改变指针p指向的地址
    return 0;
}
  1. int * const p
    • 含义:这意味着指针p本身是一个常量,一旦初始化后,它所指向的地址就不能再改变。但通过p所指向的变量的值是可以修改的。
    • 实际使用限制举例
#include <stdio.h>
int main() {
    int a = 10;
    int * const p = &a;
    *p = 15;  // 正确,可以修改p所指向的值
    // int b = 20;
    // p = &b;  // 错误,不能改变指针p指向的地址
    return 0;
}
  1. const int * const p
    • 含义:这种写法表示指针p本身是常量,同时它所指向的int型数据也是常量。即既不能改变指针p所指向的地址,也不能通过p去修改它所指向的值。
    • 实际使用限制举例
#include <stdio.h>
int main() {
    int a = 10;
    const int * const p = &a;
    // *p = 15;  // 错误,不能通过p修改它所指向的值
    // int b = 20;
    // p = &b;  // 错误,不能改变指针p指向的地址
    return 0;
}