指针常量与常量指针

什么是指针常量和常量指针?

在 C 语言中,指针是一种非常重要的数据类型,它存储了某个变量的地址,可以用来操作该变量。指针常量和常量指针是两种常见的指针类型,它们在指针的使用中有着不同的作用。

指针常量 int* const ptr; 表示存储的地址是不可变的,即不能改变指针的指向;常量指针 const int* ptr; 表示指向的值是不可变的,即不能通过该指针修改其指向的值。

指针常量和常量指针的区别

指针有四个属性:自身的值、自身的类型、指向的值和指向值的类型,而 const 修饰的无非就是自身的值和指向的值这两个属性。可以通过数组的特性来辅助记忆:

  • 指针常量(地址常量)不能改变自身值,而可以改变其指向值;
  • 常量指针反之,自身值可以改变,但不能通过指针改变指向的值。

指针常量和常量指针的应用

在 C 语言中,数组名的底层就是指针常量,通过运算符 A[x] 等价于 *(A+x),可以通过运算符 [] 计算数组名这个指针常量与整数的加减来引用数组内的各个元素。

另外,如果要把一个变量的地址赋值给指针,若变量本身被 const 修饰,那么应该把地址赋值给常量指针,避免通过指针修改了变量本身。

下面是一个简单的 C 语言代码演示,用于说明指针常量和常量指针的用法:

#include 

int main() {
    int a = 10;
    int b = 20;
    int* const ptr1 = &a;
    const int* ptr2 = &b;

    printf("a = %d, b = %d\n", a, b);
    *ptr1 = 100;
    printf("a = %d\n", a);
    // ptr1 = &b; // error: assignment of read-only variable 'ptr1'
    printf("b = %d\n", b);
    // *ptr2 = 200; // error: assignment of read-only location '*ptr2'
    ptr2 = &a;
    printf("a = %d\n", a);
    printf("b = %d\n", b);

    return 0;
}

该代码定义了两个整型变量 a 和 b,分别初始化为 10 和 20。然后,定义了一个指针常量 ptr1,它的值为 a 的地址;定义了一个常量指针 ptr2,它的值为 b 的地址。接着,代码修改了 a 的值,但不能修改 ptr1 的指向;尝试修改 b 的值会报错,但可以修改 ptr2 的指向。最后,代码打印出 a 和 b 的值。

总结

指针常量和常量指针是 C 语言中两种常见的指针类型,它们在指针的使用中有着不同的作用。指针常量表示存储的地址是不可变的,即不能改变指针的指向;常量指针表示指向的值是不可变的,即不能通过该指针修改其指向的值。在使用指针时,应根据需要选择合适的类型,并注意指针的属性和限制,避免出现错误。

你可能感兴趣的:(C/C++,c语言,c++)