如果在变量申明语句中使用了限定符const, 那么变量在程序执行期间将不能被改变。
const double version = 3.2;
const 常见用途:
1. 定义const指针,防止函数中修改由指针参数所指向的变量。
#include <iostream>
using namespace std;
void printStr(const char *str){ //使用const来确保函数不能修改str所指向对象.
while(*str){
//*str=*str+1; //错误,不能修改参数指向的对象。
cout<<(char)*str;
str++;
}
}
int main(){
printStr("string is output well.");
return 0;
}
2.用来证明发生了某个外部事项.
- 程序中不能改变const变量,但是可以通过外部程序的方法来修改const类型的变量。
3.创建命名变量,便于修改。
#include <iostream>
using namespace std;
const int size=10;
int main(){
int A1[size],A2[size],A3[size];
//
}
限定符volatile告诉编译器,可以通过程序之外的方法来改变变量的值。
==以下为转文==8<=======8<==========
c++ volatile用法(转)
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:
1) 并行设备的硬件寄存器(如:状态寄存器)
2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3) 多线程应用中被几个任务共享的变量
回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道,所有这些都要求用到volatile变量。不懂得volatile的内容将会带来灾难。假设被面试者正确地回答了这是问题(嗯,怀疑是否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。
1)一个参数既可以是const还可以是volatile吗?解释为什么。
2); 一个指针可以是volatile 吗?解释为什么。
3); 下面的函数有什么错误:
int square(volatile int *ptr)
{
return *ptr * *ptr;
}
下面是答案:
1)是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
2); 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。
3) 这段代码有点变态。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:
int square(volatile int *ptr)
{
int a,b;
a = *ptr;
b = *ptr;
return a * b;
}
由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:
long square(volatile int *ptr)
{
int a;
a = *ptr;
return a * a;
}
分享到:
相关推荐
# add eslint and eslint-define-config to project’s dev dependencies npm install --dev eslint eslint-define-config # or yarn add --dev eslint eslint-define-config 用法 .eslintrc.js const { ...
用法安装: npm install -- save three - to - cannon 进口: // ES6import { threeToCannon } from 'three-to-cannon' ;// CommonJSthreeToCannon = require ( 'three-to-cannon' ) . threeToCannon ; 用: // ...
软件工程篇-Const与#Const的对比
const和volatile
一个小型库,可通过Node.js,Deno和您的浏览器简化SOAP请求 安装 npm install easy-soap-request 要求 Node.js> = 7.6.0(异步/等待支持) 用法 Node.js const soapRequest = require ( 'easy-soap-request' ) ; ...
文档和指南 建议阅读文档以开始使用,以及使用插件的指南。 安装 NPM : npm install erela.js-facebook 纱线: yarn add erela.js-facebook 用法示例 const { Manager } = require ( "erela.js" ) ; const ...
常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:) 2、为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点...
将 JRE 和 JDK 9 添加为 JRE 支持 JavaSE-9 执行环境 使用 JRE 或 JDK 9 创建 Java 和插件项目 编译作为 Java 项目的一部分的模块 Java 编辑器 在适合的位置自动插入大括号。Java > Editor > Typing > ...
关于C语言中类型限定符const的研究.pdf
是一个用于使用node.js,express.js,multer.js 和sharp.js 调整单个/多个图像大小的软件包。 Multer-sharp-resizer:使用 node.js、express.js、multer.js 将一张或多张图像调整为多种尺寸 文档 安装 npm: $ ...
资源分类:Python库 所属语言:Python 资源全名:N_CONST-0.1.0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
const { user , cookies } = await QzoneApi . login ( 'your account' , 'your password' ) // Get user information console . log ( user ) // { login: true, owner: true, token: 'xxx' } const p_uin =...
const date1 = '12/01/2021' ; const date2 = '12/01/2021 00:00' ; const date3 = '2021/01/12' ; const date4 = '2021-01-12: 00:00' ; const date5 = '2021-01-12T03:00:00.000Z' ; formatDate ( date1 , Time...
const Koa = require ( 'koa' ) ; const basicAuth = require ( 'koa-http-basic-auth' ) ; const app = new Koa ( ) ; // Register koa-http-basic-auth middleware app . use ( basicAuth ( { user : 'username
html-to-xlsx ... 转换仅支持html表和几个基本样式属性。 当前不支持图像或图表。 用法 ...const writeFileAsync = util . promisify ( fs . writeFile ) const conversion = conversionFactory ( { ex
我使用扩展来测试和调试本地并提交我确定我的解决方案有效。 通常我会先做一个蛮力suluiton,然后做更多的优化veriosns。 举个例子: class Solution { public: vector< int > countBits ( int num) { return ...
图像到ASCII 一个Node.JS模块,可将图像...const imageToAscii = require ( "image-to-ascii" ) ; // The path can be either a local path or an url imageToAscii ( "https://octodex.github.com/images/octofez.pn
用于检索可以从命令提示符启动的应用程序。 使用 reg.exe,仅限WINDOWS !喜欢它? 给我买啤酒。安装npm install registry-apppaths --save出口功能get() , has() , refresh()用法.get(): string[] 返回位于 App...
1)....Added "ECC32TradeSpeedForMemory" option - defaults to 0/False, could be changed to 1 via Custom/Manual tab. This option will switch from fast-methods to slower methods, but which take less ...
do, I’d like to reply to the following query I received through e-mail from Phil Baurer at Komatsu Mining Systems: “We’re having an interesting prob- lem using const with a typedef. I hoped you ...