• 【c语言中的指针常量和常量指针介绍】


    在这里插入图片描述
    C语言中有两个重要的概念:常量指针(pointer to constant)和指针常量(constant pointer)。它们分别描述了指针和指向的内容的可变性。

    1. 常量指针(Pointer to Constant):常量指针是一个指针,它指向的内容是常量,不能通过该指针修改其指向的值。在声明时,使用const关键字将指针指向的内容标记为常量。常量指针本身的值(即存储的地址)可以变化。

      示例:

      int num = 42;
      const int *ptr = #  // 常量指针,不允许通过ptr修改num的值
      
      // 合法的操作
      int x = *ptr; // 可以读取num的值
      
      // 非法的操作
      *ptr = 10;   // 不能通过ptr修改num的值
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    2. 指针常量(Constant Pointer)指针常量是一个指针,它本身是常量,一旦指向了某个地址,就不能再指向其他地址。在声明时,使用const关键字将指针本身标记为常量。指针常量指向的内容是可以变化的。

      示例:

      int num1 = 42, num2 = 10;
      int *const ptr = &num1;  // 指针常量,ptr永远指向num1
      
      // 合法的操作
      *ptr = 20; // 可以通过ptr修改num1的值
      
      // 非法的操作
      ptr = &num2; // 不能修改ptr指向的地址
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

    总结:

    • 常量指针:指针指向的内容是常量,指针本身可以改变指向不同的内容。
    • 指针常量:指针本身是常量,指针指向的内容可以改变。

    选择使用常量指针或指针常量取决于你的需求和设计。常量指针通常用于传递参数时,可以确保函数不会修改传递的数据。指针常量通常用于实现常量指针(如数组名)或确保指针在初始化后不会指向其他内容。

    以下是一个综合示例,演示了常量指针和指针常量的使用:

    #include 
    
    int main() {
        int num1 = 42, num2 = 10;
    
        // 常量指针,不能通过ptr修改num1的值
        const int *ptr1 = &num1;
    
        // 指针常量,ptr2永远指向num1
        int *const ptr2 = &num1;
    
        // 合法的操作
        int x = *ptr1; // 可以读取num1的值
        *ptr2 = 20;    // 可以通过ptr2修改num1的值
    
        // 非法的操作
        *ptr1 = 30;    // 不能通过ptr1修改num1的值
        ptr2 = &num2;  // 不能修改ptr2指向的地址
    
        printf("num1: %d\n", num1); // 输出20
        printf("num2: %d\n", num2); // 输出10
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这个示例中,我们声明了一个常量指针ptr1和一个指针常量ptr2,然后展示了各种合法和非法的操作。通过这个示例,你可以看到常量指针和指针常量之间的区别和用法。

  • 相关阅读:
    2023 Google 开发者大会学习心得总结
    ASP.NET CORE在docker中的健康检查(healthcheck)
    艾美捷CpG-A DNA,人/小鼠的功能和应用
    Java#15(集合)
    Ajax入门
    mac安装nvm
    【面试:并发篇31:多线程:cas】无锁实现并发
    腾讯开源业界首个云原生标准的一站式微服务管理框架Femas
    【2022-11-07】 转-代码质量保证
    IPMP、PMP、CPMP三个证书该如何选择,有什么区别,哪个对于工作上的
  • 原文地址:https://blog.csdn.net/weixin_41777118/article/details/133365603