zoukankan      html  css  js  c++  java
  • 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->这个最严格,期指针的值不可修改,其指向的地址处的值也不可修改。

  • 相关阅读:
    socket套接字
    popen:让进程看似文件
    fdopen:让文件描述符像文件一样使用
    计算机"右击"管理,不出现界面,解决方案
    javaEE版本的eclipse中导入工程,发现server里面找不到工程,根本发布不了也不能运行
    初识springMVC
    数据库系统
    Red hat 下nfs服务器的搭建
    Linux下MySQL安装和配置
    复习Hibernate(1)
  • 原文地址:https://www.cnblogs.com/witxjp/p/4964840.html
Copyright © 2011-2022 走看看