zoukankan      html  css  js  c++  java
  • [原创]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就没问题了~

      


  • 相关阅读:
    NOI2005 维护数列(splay)
    傻子代码行列式
    Matrix-tree定理 spoj HIGH
    Boruvka算法求最小生成树
    Codeforces 521 E cycling city
    欧拉回路 uoj117
    BZOJ1146: [CTSC2008]网络管理Network
    我的OI生涯番外篇
    主席树+dfs SPOJ BZOJ2588 Count on a tree
    动态主席树 优化版
  • 原文地址:https://www.cnblogs.com/librasun/p/5267708.html
Copyright © 2011-2022 走看看