对于多数人来说那些const的使用方法比方修饰返回值和修饰參数都应该是十分好理解的下来我要讨论

对于C语言中

#include <stdio.h>

void main()
{
const int a=10;
int *p =(int*) &a;
*p = 100;
printf("%d\n",a);
}

上边输出100

对于C++中

#include<iostream>
using namespace std; void main()
{
const int a=10;
int *p =(int*) &a;
*p = 100;
printf("%d\n",a);
}

上边输出10

原因是什么呢。C中为const是一个不能被改变的变量,有内存空间的分配,所以能够在内存中通过地址改变

C++中的const是一个常量,通常是保存在字符表中,不分配内存。仅仅是在方位该变量的时候或者查看变量的地址的时候就会又一次分配一个同名变量与const的常量的值同样,所以此时输出的地址是这个新变量的地址。所以通过地址改变的还是这个变量的值。可是输出的时候编译器还是会在符号表里面读取这个常量的值,所以值未改变

const int size;

//c中const默认外部链接这里仅仅是一个声明而已



const int bufsize = 100;

char buf[bufsize];//这在C语言中是非法的,由于c语言中bufsize是一个不能改变的变量

                 //可是这在C++中合法的。由于C++中不为bufsize建立存储空间。仅仅是存储在符号表中

                  

//可是C++中const默认内部连接,假设要在多编译单元中使用必须设置为

extern const int bufsize=100;    //改为外部连接,此时就是强制为const创建空间

extern const int bufsize;//这在c++中仅仅是声明,仅仅能在初始化的时候才分配内存

//在c++中一个const不必建立空间,可是c中const必须建立空间    

 

const int i[] = {1,2,3,4};//集合不能保存到符号表中。所以仅仅能也必须分配内存

float f[i[3]];//编译期间的值是不能使用的。由于编译期间编译器就不知道存储器的内容

struct S

{

    int i;

    int j;

};

const S s[] = {{1,2},{3,4}};



int main()

{



}

空暇时候思考之const的更多相关文章

  1. 空暇时候思考2(&#39;\0&#39;等价于数字0还是字符0)

    /********************************************************************** * * Copyright (c)2015,WK Stu ...

  2. C++面向对象高级编程(九)Reference与重载operator new和operator delete

    摘要: 技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nul ...

  3. Go语言net/http 解读.

    Http包提供实现HTTP客户端和服务端的方法与函数. Get.Head.Post.PostForm配合使用实现HTTP请求: resp, err := http.Get("http://e ...

  4. openssl 1.1.1 reference

    openssl 1.1.1 include/openssl aes.h: # define HEADER_AES_H aes.h: # define AES_ENCRYPT 1 aes.h: # de ...

  5. 近期学习es6后对变量提升及let和const的一点思考

    1.变量提升:(创建->初始化)-->赋值-->修改 就是说,以var声明的变量,它的声明会被提升到当前作用域的顶端(注意是变量声明提升,变量的赋值没有提升) //在if语句中也会提 ...

  6. 今天思考一个问题,PHP const和static的区别

    static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心 ...

  7. C++中关于const的思考

    在学习C++的过程中,经常被什么时候使用const.为什么使用const以及怎么使用const关键字这样的问题所困扰,以下是我对const的使用总结. 1.值替代 使用#define的确单缺点,第一: ...

  8. 对于C++中const & T operator= 的一点思考

    一个正常的assignment操作符的声明是这样的. const elmentType & elmentType::operator=(const elmentType &rhs) 这 ...

  9. 对const的总结与思考

    今天偶然想起const这一关键字,再加之以前几种const修饰指针方式让我印象深刻(混淆不清),重新回顾了一下,自己对这个关键词也又有了更加深刻的理解,所以总结一下. 一.const的定义 const ...

随机推荐

  1. 关于Vue实例的生命周期(2)

     关于Vue实例的生命周期(2) 创建(create)->挂载(mount)->更新(update)->销毁(destory) 钩子函数触发事件 beforeCreate 在实例初始 ...

  2. 记一次在BroadcastReceiver或Service里弹窗的“完美”实践

    事情是这样的,目前在做一个医疗项目,需要定时在某个时间段比如午休时间和晚上让我们的App休眠,那么这个时候在休眠时间段如果用户按了电源键点亮屏幕了,我们就需要弹出一个全屏的窗口去做一个人性化的提示,“ ...

  3. [CSS3] The different of Background-size between 'cover' and 'contain'

    'cover': The smaller axies of image (x axies) should match smaller axies (x axies) of container. So ...

  4. [React] Work with HTML Canvas in React

    React's abstraction over the DOM means that it's not always obvious how to do DOM-related things, li ...

  5. POJ-1785-Binary Search Heap Construction(笛卡尔树)

    Description Read the statement of problem G for the definitions concerning trees. In the following w ...

  6. Hibernate的多种关系映射(oto、otm、mtm)

    前提:使用注解映射 一.一对一(夫妻关系表) 两个表:hus1和wife1表,外键为id,各自有名字hname和wname 映射得到两个类:Hus1和Wife1类 Hus1类(主表): package ...

  7. m_Orchestrate learning system---二十七、修改时如何快速找到作用位置

    m_Orchestrate learning system---二十七.修改时如何快速找到作用位置 一.总结 一句话总结:找人,找起作用的位置真的重要,找到就事半功倍了 加载页面的时候观察在f12的e ...

  8. DB-MySQL:MySQL 函数

    ylbtech-DB-MySQL:MySQL 函数 1. MySQL 字符串函数返回顶部 1. MySQL 字符串函数 函数 描述 实例 ASCII(s) 返回字符串 s 的第一个字符的 ASCII ...

  9. [JZOJ 5910] [NOIP2018模拟10.18] DuLiu 解题报告 (并查集+思维)

    题目链接: https://jzoj.net/senior/#contest/show/2530/0 题目: LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃 ...

  10. URAL 1297 后缀数组+线段树

    思路: 论文题--*n 倒过来接上 分奇偶讨论 求LCP 搞棵线段树即可 //By SiriusRen #include <cstdio> #include <cstring> ...