空暇时候思考之const
对于多数人来说那些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的更多相关文章
- 空暇时候思考2('\0'等价于数字0还是字符0)
/********************************************************************** * * Copyright (c)2015,WK Stu ...
- C++面向对象高级编程(九)Reference与重载operator new和operator delete
摘要: 技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nul ...
- Go语言net/http 解读.
Http包提供实现HTTP客户端和服务端的方法与函数. Get.Head.Post.PostForm配合使用实现HTTP请求: resp, err := http.Get("http://e ...
- 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 ...
- 近期学习es6后对变量提升及let和const的一点思考
1.变量提升:(创建->初始化)-->赋值-->修改 就是说,以var声明的变量,它的声明会被提升到当前作用域的顶端(注意是变量声明提升,变量的赋值没有提升) //在if语句中也会提 ...
- 今天思考一个问题,PHP const和static的区别
static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心 ...
- C++中关于const的思考
在学习C++的过程中,经常被什么时候使用const.为什么使用const以及怎么使用const关键字这样的问题所困扰,以下是我对const的使用总结. 1.值替代 使用#define的确单缺点,第一: ...
- 对于C++中const & T operator= 的一点思考
一个正常的assignment操作符的声明是这样的. const elmentType & elmentType::operator=(const elmentType &rhs) 这 ...
- 对const的总结与思考
今天偶然想起const这一关键字,再加之以前几种const修饰指针方式让我印象深刻(混淆不清),重新回顾了一下,自己对这个关键词也又有了更加深刻的理解,所以总结一下. 一.const的定义 const ...
随机推荐
- document.documentElement与body下clientHeight,scrollHeight等区别
本次说明仅在chrom环境下,ie等其他浏览器可能不同 1获取显示屏高度(pc和移动端,屏幕分辨率px) window.screen.height => 这个好理解,不多说. 2获取浏览器可视窗 ...
- 自己动手写shell命令之more
unix下more命令的简单实现: #include <stdio.h> #define PAGELEN 24 #define LINELEN 512 int do_more(FILE * ...
- 查看系统的I/O使用iostat命令而使用iotop能够依据I/O统计信息排序,追踪到详细的进程
当看到I/O等待时间所占CPU时间的比重非常高的时候,首先要检查的就是机器是否正在大量使用交换空间,由于硬盘操作的速度远远低于RAM.所以当系统内存耗尽,開始使用交换空间的时候.系统的性能会受到严重影 ...
- 《iOS Human Interface Guidelines》——System Button
系统button 系统button运行一个app特定的动作. API NOTE 在iOS 7中,UIButtonTypeRoundedRect被又一次定义成UIButtonTypeSystem.查看U ...
- Android程序全然退出的三种方法
1. Dalvik VM的本地方法 android.os.Process.killProcess(android.os.Process.myPid()) //获取PID,眼下获取自己的也仅仅有该 ...
- L2CAP数据发送和接收
ACL 链路在 Bluetooth 中非常重要,一些重要的应用如 A2DP, 基于 RFCOMM 的应用.BNEP等都要建立 ACL 链路,发送/接收ACL 包.跟大家一起来分析 ACL 包发送/接收 ...
- 2435: [Noi2011]道路修建(树上操作)
2435: [Noi2011]道路修建 题目:传送门 题解: 建完边之后以1为根建树,统计深度和各个点的子树大小(包括自己) 询问的时候:答案=长度*abs(n-深度大的点的子树大小*2) ans+= ...
- Git 跟 GitHub 是什么关系?
Git 跟 GitHub 是什么关系? 大概就是「魔兽争霸」与「对战平台」的关系吧. git是一个版本控制工具github是一个用git做版本控制的项目托管平台. git是一个版本管理工具,githu ...
- 87.node.js操作mongoDB数据库示例分享
转自:https://www.cnblogs.com/mracale/p/5845148.html 连接数据库 var mongo=require("mongodb"); va ...
- Linux就该这么学 20181002(第二章基础命令)
参考链接https://www.linuxprobe.com/ 忘记密码操作 启动页面 默认按e 在linux16行后空格 rd.break ctrl + x mount -o remount,rw ...