• [原创]c语言中const与指针的用法


    最近一直在准备笔试,补补大一大二欠下的课。复习c语言时碰见这么个题:

     
    1
    2
    3
    4
    5
    int a=248, b=4;
    int const c=21;
    const int *d=&a; 
    int *const e=&b;
    int const const f =&a; 
    请问下列表达式哪些会被编译器禁止?
    A:*c=32

    B:*d=43
    C:e=&a

    D:f=0x321f

    E:d=&b

    F:*e=34


    下面逐条分析
    第一行代码不提, 第二行,int const c=21;和const int c=21;是一个意思,都是修饰c为const,即c的值不能变化。所以A,肯定错,c就不是一个指针;
    第三行:const int *d=&a;表示d指向的值是不可通过指针改变的,所以B:*d=43错误。而d的指向是可变的,这里d=&a,E:d=&b也是正确的;
    第四行:int *const e=&b;表示指针e的指向是不能改变的,所以C错;但可以改变指向的值,*e=34是正确的,F正确;
    第五行:int const const f =&a;表示指针f的指向和指向的内容都不能改变,D错误
    题目问哪些会被禁止,所以答案是ABCD。

    这里百度百科里介绍了一个方法:
    const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在*的右边,则指针的指向不可变。简记为“左定值,右定向”

    但是一定要注意,int * const p; int const * const p; 或者 const int * const p;这三种表示都是指针指向不能改变的,定义时要初始化一个地址。

    基本上const就没问题了~

      


  • 相关阅读:
    [HNOI2002]营业额统计 (Splay)
    [POJ1664] 放苹果 (动态规划,组合数学)
    [AHOI2009]维护序列 (线段树)
    类型转换求和
    懒人创造方法
    编程的精义
    10-instanceof
    9-接口
    6-SUPER关键字
    5-重写与重载
  • 原文地址:https://www.cnblogs.com/librasun/p/5267708.html
Copyright © 2020-2023  润新知