const

C++ 关于用指针修改const的值

二次信任 提交于 2020-03-15 10:49:55
在C++中,const值是不能被修改的,但是我们经常试着用指针去修改const的值, 今天写了一个小程序,觉得很神奇~~ 如图所示,i是一个int型的常量,初始值为0,我们用int型的指针j指向i,然后修改j指向地址的值,使之为5; 然后我们可以看这个程序的结果: 可以看到(*j)的值,改变了,并且j所指向的地址和i的地址是同一个地址,但是i的值竟然还是没有变化,是0, 明明是同一个地址,为什么会有不同的值? 最有趣的是,cout<<*(((&i)+2)-2)<<endl;的值依旧没有改变,取到i的地址,将其变化后指向原来的地址,结果还是没有变化,那么存放j所指向地址的内容5又放在哪里了呢? 网上说C++对于const是用一种类似与宏的原理来处理的,编译器只要看到i,就会将其付为初始值,先暂且这么理解吧! 还是理解得不是很透彻。 后来LZ在人人上发了条状态,竟然有人说我运行的结果不对,后来才发现这个问题是和编译器相关的, 在VS下,cout<<*(((&i)+2)-2)<<endl;的结果是5,与GNU C++的编译器结果不同,看来这是编译器优化的结果,编译器的作用还是挺大的! 来源: oschina 链接: https://my.oschina.net/u/171154/blog/58243

NodeJS express框架的使用

不问归期 提交于 2020-03-15 07:59:08
首先,可以通过npm或者淘宝镜像cnpm全局安装epress框架,这里不具体说了 npm install -g express npm install -g express-generator 新建一个项目 express -e xxx 目录说明: bin:项目的启动文件,也可以放其他脚本。 node_modules:用来存放项目的依赖库。 public:用来存放静态文件(css,js,img)。 routes:路由控制器。 views:视图目录(相当于MVC中的V)。 app.js:项目入口及程序启动文件。 package.json:包描述文件及开发者信息。 -----------------------------------------------其他,自己创建使用------------------------------ actions:控制器,对请求的操作(相当于MVC中的C)。 plugs:数据库操作、邮件帮助等文件。 config:配置目录。 Dockerfile:做自动化部署的配置文件。 .gitignore:上传git的忽略文件配置。 README.md:项目说明文件。 app.js文件: 1 /** 2 * 应用程序的入口文件 3 */ 4 //加载express模块 5 const express = require('express'); 6 const

SV通过DPI调用C

瘦欲@ 提交于 2020-03-14 15:41:24
Verilog与C之间进行程序交互,PLI(Programming Language Interface)经过了TF,ACC,VPI等模式。 使用PLI可以生成延时计算器,来连接和同步多个仿真器,并可以通过波形显示等调试工具。 通过PLI方式连接一个简单的C程序,需要编写很多代码,并理解多仿真阶段的同步,调用段,实例指针等概念。 PLI方式给仿真带来了额外的负担,为了保护Verilog的数据结构,仿真器需要不断的在Verilog和C之间复制数据。 SystemVerilog引入了DPI(Direct Programming Interface),能够更简洁的连接C,C++或者其他非Verilog的编程语言。 只要使用import声明和使用,导入一个C子程序,就可以像调用SystemVerilog中的子程序一样来调用它。 SystemVerilog和C语言之间传递的最基本的数据类型是int,双状态的32位的数据类型, 通过import声明定义C任务和函数的原型, 带有返回值的C函数被映射成一个systemverilog的函数(function), void类型的C函数被映射为一个systemverilog的任务(task)或者void 函数(function) 通过“DPI-C”引入的C函数, 可以直接在function中调用,但是只在该DPI被声明的空间内有效 ,

Go语言入门(一)

你说的曾经没有我的故事 提交于 2020-03-14 11:28:31
Go语言入门(一) Go语言简介 官方介绍 Google推出的一门编程语言 开源编程语言,结构简单,可靠,高效 Go语言的主要开发者 2007年有Robert Griesemer,Rob Pikle,Ken Thompson主持开发 2009年11月开源 Go语言的特点 简洁,快速,安全 并发,开源 内存管理,数据安全,编译迅速 跨平台 Go语言环境安装 安装步骤如下 下载地址: https://studygolang.com/dl 根据平台安装不同的安装包 安装路径不要出现中文 开发环境 Goland: 破解方法参考( https://www.cnblogs.com/zhangguosheng1121/p/11448194.html ) Vscode 第一个Go语言程序 helloworld package main // package 表示该文件所属的包 // 导入包 import "fmt" //行注释,可以注释单行 /* 块注释 可以注释多行 */ // func 函数 //main 主函数名,主函数名有且只有一个,作为程序的主入口 // () 函数参数列表 // {} 函数体 // fmt.Println 打印 // hello world func main01() { //Println:打印并换行 fmt.Println("Hello World!") fmt

「模板」替罪羊树

扶醉桌前 提交于 2020-03-14 11:15:17
目录 变量/函数の定义 代码 变量/函数の定义 变量/函数名 定义/作用 tax[] 将树拍扁时用的临时数组 tail 与 tax[] 配套使用,类似于栈顶指针 son[x][] 点 \(x\) 在树上的左/右儿子 exist[x] 点 \(x\) 存在与否, \(1\) 为存在 val[x] 点 \(x\) 的值 siz[x] 点 \(x\) 的子树一共有多少节点 fact[x] 点 \(x\) 的子树实际还存在多少节点 rt 树根 memory_pool[] 内存池 origami 记录内存池的元素个数,也用作栈顶指针 真不是折纸大师 void buildPool() 建立内存池 int Newnode() 获取一个新节点编号 void Release(x) 释放节点 \(x\) ,即重新放回内存池 void Clear(x) 将点 \(x\) 清空 void Leaf(x) 建立点 \(x\) 为叶子的信息,双儿子为 \(0\) 且子树大小为 \(1\) void Pushup(x) 顾名思义,上传操作 bool Balance(x) 返回树 \(x\) 平衡与否, \(1\) 为平衡 void Insert(x,v) 在点 \(x\) 的子树里面插入值 \(v\) void Delete(x,rnk) 在点 \(x\) 的子树里面删除排名为 \(rnk\) 的值 int

2012 MUTC 10 总结(The Final MUTC of this Summer)

余生颓废 提交于 2020-03-14 11:06:40
题解链接: http://page.renren.com/601081183/note/867254911 题目编号:hdu 4390~4399   这是杭电多校联合的最后一场比赛了,直到最后的这场比赛我们队在比赛中的题目数还是没有突破3题的局限。   今天比赛开始的时候,依然是我的队友读题,而我就随便看了一题在一边想。第一题看到的就是1001,一道排列组合的题目。这几天都有看排列组合的题,不过基本上都不能1y,所以这题我想了一下,翻了一下《组合数学》,然后就放弃了。1001的思路是有的,不过就是不会后期的计算。组合数学是我的弱项,之后的学习必须要加强!   然后就是队友看的1004,刚开始,我想着暴力寻找,用线段树更新,不过到后来才发现用线段树更新结点还是要变成逐个更新。于是,我就没辙了,丢给队友想。   这时,发现1007也有很多人过,所以我就改向去看1007了。听队友讲了一下题意,我基本明白了题目的意思。当时我想了一下最短路来算这个,不过好像不能得到准确的答案,而且操作起来又或者最后的还是有点麻烦的。于是,当时我就想到层次遍历,利用上一层的结果得到当前步数到达各点的最短时间,如果到满足要求的那一层,汇点的状态是无穷大,那么就是不可达。不过我想深一层的时候,发现有可能走多很多条路才得到最优解。于是,我又卡住了。不过很快的,我就想到一个特点,至少要走的那k层走够了以后

[Functional Programming] Function modelling -- 4. Reader Monda example

[亡魂溺海] 提交于 2020-03-14 06:30:59
const Reader = run => ({ run, map: f => Reader(x => f(run(x))), chain: f => Reader(x => f(run(x)).run(x)), concat(o) { return Reader(x => run(x).concat(o.run(x))); } }); Reader.of = x => Reader(() => x); Reader.ask = Reader(x => x); const prefix = s => m => `${s}${m}`; const prefixHttps = prefix("https://"); const prefixHttp = prefix("http://"); const res = Reader.of("localhost") .chain(host => Reader.ask.map(config => config.https ? prefixHttps(host) : prefixHttp(host) ) ) .chain(domain => Reader.ask.map(config => `${domain.concat(":").concat(config.port)}`) ) .run({ port: 3000, https: true }

宏常量,宏替换,const常量

徘徊边缘 提交于 2020-03-14 03:59:36
(1)宏常量也称为符号常量,是指用一个标识符号来表示的常量,宏常量是由宏定义编译预处理命令来定义的,宏定义的一般形式:#define 标识符 字符串 宏定义中的标识符被称为宏名,将程序中出现的宏名替换成字符串的过程称为宏替换,宏替换时是不做任何语法检查的,因此,只有在对已经被宏展开后的源程序进行编译时才会发现语法错误 (2)const常量:使用宏常量的最大问题是,宏常量没有数据类型。那么是否可以声明具有某种数据类型的常量呢?这就是const常量 const常量被编译器放在只读存储区,不允许在程序中改变其值,因此const常量只能在定义时赋初值。 来源: https://www.cnblogs.com/ACPIE-liusiqi/p/8877710.html

宏常量和const常量

て烟熏妆下的殇ゞ 提交于 2020-03-14 03:59:21
宏常量和const常量 标签(空格分隔): C 双学位高级语言程序设计 C算术运算和表达式 宏常量 对于那些经常使用常量,为了防止多次使用后弄错,或者忘记这个常量的含义,所以需要定义宏常量,用字符代替常量 定义格式如下 #define Pi(宏常量名) 3.14(字符串) 意为执行编译预处理命令(#define),在以后的运行中,将所有宏常量名Pi都替换为常量3.14。 虽然这样用宏常量很方便,但是宏常量是没有数据类型的,既不是int型又不是float型,所以如果需要赋给其类型,需要用到const常量。 定义格式如下 const int e=2.71828; const常量存储在只读存储区中,只在定义时被赋初值,所以可以起到和宏常量类似的作用,还带有数据类型,方便编译器编译时检查有无因数据类型引起的错误。 来源: https://www.cnblogs.com/yichuan-sun/p/9624189.html

c++ 常量/有符号数和无符号数

穿精又带淫゛_ 提交于 2020-03-14 03:59:01
一、宏定义 #define 和常量 const 1、 const关键字 const 是 constant 的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改。也就是说const意味着只读(readonly)。 const修饰一个变量,一定要给这个变量初始化值,若不初始化,后面就无法初始化。 1.1 #include <iostream> using namespace std; int main() { const double pi; //圆周率的值用pi表示 pi=3.14159265; cout<<"圆周率的近似值是"<<pi<<endl; return 0; } 报错,没有初始化。只读。 1.2 #include <iostream> using namespace std; int main() { const double pi=3.141592; //圆周率的值用pi表示 cout<<"圆周率的近似值是"<<pi<<endl; return 0; } 1.3 const关键字应用 欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了; 对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; 在一个函数声明中