• const浅析


    // age1age2是常量,只读,下面两个写法是相同的
        const int age1 = 20;
        int const age2 = 30;
        
    // const的修饰的*p1和*p2,*p1和*p2是常量,不能通过p1、p2指针间接修改其他变量的值,下面p1和p2的写法相同
        const int *p1 = &age;
        int const *p2 = &age;
        
        int num = 30;
        p1 = #
        p2 = #
        
        // 写法错误 *p1 = 40;
        // 写法错误 *p2 = 50;
        
        // const修饰的p3,p3是个常量,p3不能再指向其他变量
        int * const p3 = &age;
        
        // 写法错误
        //        int num = 30;
        //        p3 = #
        
        // 写法正确
        //        *p3 = 30;

     

    #include <stdio.h>
    
    /*
     const 使用地方
     
     1)修饰变量
     
     2)修饰指针变量
     
     3)修饰数组
     */
    
    /**
     *  const修饰变量,使得变量变成常量
     */
    void test1()
    {
        // 使用const修饰变量a
        const int a = 10;
        printf("a = %d
    ", a); // 10
    //    a = 20; // read-only
        printf("a = %d
    ", a);
    }
    
    /**
     *  用指针强制修改const常量
     */
    void test2()
    {
        // 使用const修饰变量a
        const int a = 10;
        printf("a = %d
    ", a); // 10
        int *p = &a;
        *p = 100; // 强制修改常量
        printf("a = %d, *p = %d
    ", a, *p); // 10,100
    }
    
    int main(int argc, const char * argv[]) {
        
        int a = 10;
        int b = 20;
        
        // 定义个指针变量,p指向a
        // 此处的const的作用是指针变量p的指向可以改变,但是指向的变量的值
        // 不能改变
        // 1.const修饰的指针变量指向可变,指向的变量的值不可变
        const int *p = &a; // 给p初始化
        p = &b; // 重新修改了p的指向
    //    *p = 100; // 错误写法
        
        int const *p1 = &a;
        p1 = p; // p1的指向也是可以改变的
    //    *p1 = 100; // p1指向的变量的值时不能改变的
        
        // 2.const修饰的指针变量,指针变量指向的变量值可以改变,指向不能变
        int * const p2 = &a;
        *p2 = 100; // 值可以改变
    //    p2 = &b; // p2的指向不能变
        
        // 3.const修饰的指针变量的指向和值,都不能改变
        const int * const p3 = &a;
    //    p3 = &b; // 指向不能变
    //    *p3 = 100; // 指向的变量的值也不能变
        
        
        printf("a = %d
    ", a);
        
        /**
         记忆技巧:
            看 const 和 * 的位置
            如果  const 在 *的左侧    表示指针变量指向的变量的值不能变,但是指向可以改变
            如果  const 在 *的右侧    表示指针变量指向的变量的值可以改变,但是指向不就可以改变
            如果  const   出现在 *的两侧,表示指针变量的指向和值都不能改变
         */
        
        return 0;
    }
  • 相关阅读:
    [不错]A step-by-step guide to enabling security, TLS/SSL, and PKI authentication in Elasticsearch
    asp.net core 从单机到集群
    Redlock:Redis分布式锁最牛逼的实现
    es为什么要取消type? 或者为什么一个index下多个type会有问题
    reorder-list——链表、快慢指针、逆转链表、链表合并
    c 链表之 快慢指针 查找循环节点(转)
    binary-tree-preorder-traversal——前序遍历
    binary-tree-postorder-traversal——二叉树后续遍历
    insertion-sort-list——链表、插入排序、链表插入
    sort-list——链表、快慢指针找中间、归并排序
  • 原文地址:https://www.cnblogs.com/521it/p/5017321.html
Copyright © 2020-2023  润新知