MST
星途 面试题库

面试题:C++中const与指针结合的基础应用

请解释以下C++代码中`const`与指针结合的不同含义,并分析哪些代码会导致编译错误。 ```cpp int num = 10; const int *ptr1 = # int const *ptr2 = # int * const ptr3 = # const int * const ptr4 = # ```
32.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. const int *ptr1 = #
    • 含义:ptr1是一个指向const int类型的指针。即指针所指向的值不能通过ptr1来修改,但指针ptr1本身可以指向其他地址。
    • 例如:
    // *ptr1 = 20; // 编译错误,不能通过ptr1修改所指向的值
    int num2 = 20;
    ptr1 = &num2; // 合法,ptr1可以指向其他地址
    
  2. int const *ptr2 = #
    • 含义:与const int *ptr1完全等价,ptr2也是一个指向const int类型的指针。指针所指向的值不能通过ptr2来修改,但指针ptr2本身可以指向其他地址。
    • 例如:
    // *ptr2 = 30; // 编译错误,不能通过ptr2修改所指向的值
    int num3 = 30;
    ptr2 = &num3; // 合法,ptr2可以指向其他地址
    
  3. int * const ptr3 = #
    • 含义:ptr3是一个常量指针,它一旦初始化指向了num,就不能再指向其他地址,但可以通过ptr3修改其所指向的值。
    • 例如:
    *ptr3 = 40; // 合法,可以通过ptr3修改所指向的值
    // int num4 = 40;
    // ptr3 = &num4; // 编译错误,ptr3不能再指向其他地址
    
  4. const int * const ptr4 = #
    • 含义:ptr4既是一个指向const int类型的指针,又是一个常量指针。即不能通过ptr4修改所指向的值,并且ptr4也不能再指向其他地址。
    • 例如:
    // *ptr4 = 50; // 编译错误,不能通过ptr4修改所指向的值
    // int num5 = 50;
    // ptr4 = &num5; // 编译错误,ptr4不能再指向其他地址
    

上述代码本身都不会导致编译错误,它们展示了const与指针结合的不同用法。但如果按照注释中错误的方式使用指针,就会产生编译错误。