• const常量定义数组大小


    结果是不能编译通过,如下

    大致意思是常量size2是用变量temp定义的,所以size2的值是不固定的,不固定的值当然是不能够用来定义数组的,因为编译器在编译的时候就需要知道给数组分配多大空间,而变量的值在运行时有可能变化。

    将char str2[size2]这句去掉是可以编译通过的,这说明const常量是可以通过变量初始化的。只是在初始化之后就不可以再修改了。

    这些规则其实都是编译器行为。

    这个题让我想起了const与数据,指针的组合。

    (1)常量数据: const int n, int const n

    (2)常量指针: int * const p

    (3)指向常量数据的指针: const int * p, int const * p

    (4)指向常量数据的常量指针: const int * const p, int const * const p

    看的让人眼花缭乱,其实很好记,

    在有*和const的情况下,先看*和const的位置,只有const在*之后,这个const修饰的才是指针,在*之前,这个const修饰的都是数据。所以常量指针只有一种表示(* const)

    而在没有*和有*但const在*之前的情况下,const修饰的都是数据,所以(const *)这种情况修饰的一定是数据,而数据int与const的位置又有2种,int const,和const int。

    再来解释一下上述4种情况的含义

    (1)常量数据: const int n, int const n ->这个数据一旦初始化,就不可以再更改,即使想间接的通过指针修改也不可以,所以它只可以赋值给指向常量数据的指针。

    (2)常量指针: int * const p ->这个指针的值一旦初始化,就不可以再更改,即指针不可以再重定向,指向了固定的地址,但可以通过(*p)修改这个地址的值。即它指向的不是常量数据。

    (3)指向常量数据的指针: const int * p, int const * p ->这个指针指向的地址是可以修改的,但不可以通过(*p)修改该地址处的值。

    (4)指向常量数据的常量指针: const int * const p, int const * const p->这个最严格,期指针的值不可修改,其指向的地址处的值也不可修改。

  • 相关阅读:
    nagios监控oracle 表空间
    Oracle报错,ORA-28001: 口令已经失效
    存储基本知识【转载】
    通过shell查找访问日志中访问量最大的ip
    《Java程序设计》 第二周学习任务
    IntelliJ IDEA 激活
    破解某绝地和某DNF辅助
    SMMS:一个不错的免费图床
    Linux使用ASF云挂卡(挂游戏时长)
    Centos7手动编译安装apache
  • 原文地址:https://www.cnblogs.com/witxjp/p/4964840.html
Copyright © 2020-2023  润新知