const在c中和c++中

在C语言中


1

2

3

4

5

6

7

void

main(){

    const

int

i = 0;

    int

*j = (
int

*)&i;

    *j
= 1;

    printf("%d,%d",
i, *j);

    system("pause");

}

结果输出为1,1

在C++中


1

2

3

4

5

6

7

8

9

10

#include<iostream>

using

namespace

std;

int

main(
void){

    const

int

i=0;

    int

*j = (
int

*)&i;

    *j
= 1;

    printf("%d,%d",
i, *j);

    system("pause");

    return

0;

}

结果输出为0,1

分析:C语言中的const是运行时const,编译时只是定义,在运行才会初始化。C语言中const变量不能用于成为数组长度等作为编译时常量的情况,原因就在此。C语言const变量在运行时改变了是可以再次读出改变后的值的。

C++中,const变量是编译时的常量,可以向#define定义的常量一样使用。故C++中const变量的值在编译时就已经确定了,直接对cosnt变量进行了值的替换,因此当const变量的值改变时,const的变量值是不会得到更新的。

指const变量(即常量)值放在编译器的符号表中,计算时编译器直接从表中取值,省去了访问内存的时间,从而达到了优化。

而在此基础上加上volatile修改符,即告诉编译器该变量属于易变的,不要对此句进行优化,每次计算时要去内存中取数。

博主理解:

1.const变量虽不能直接改变,但是可以通过指针间接改变。

2.const变量只读取一次,其他都在寄存器上进行。

3.i,j尽管地址一样,但是j仅是存在于寄存器中。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-08 03:26:05

const在c中和c++中的相关文章

const基础知识、const在C++和C中的异同、const与#define宏定义的异同

1.const基础知识 (1)用const定义常量 const int a = 5;   //定义了一个int型常量a,其值为5 (注:在C++中将其存储在符号表中(key,value),并不分配内存空间,只有在取地址或者定义为全局变量在其他文件中使用时才分配内存空间) (2)const与指针 1 const int* p1 = &a; //p1是指向常量a的指针,a的值不能通过指针p1改变 2 3 int* const p2 =&b; //p2是只能指向b的指针,b的值可以通过p2改变

内部链接和外部链接以及const对象在头文件中的若干问题

首先我们看一段示例代码: t1.h [cpp] view plaincopyprint? #ifndef T1_H_ #define T1_H_ #include "t2.h" #ifndef HHH #define HHH int da = 5; #endif #endif #ifndef T1_H_ #define T1_H_ #include "t2.h" #ifndef HHH #define HHH int da = 5; #endif #endif t2

在java中和javascript中过滤掉类似于img形式的字符串,从而不显示图片

1:javascript过滤掉<img></img>和<img />形式的字符串 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtm

Eclipse中和windows中的换行

不同系统的换行标识 windows 用   \r\n linux/unix 用   \n Mac   OS 用   \r 采用commons-io的包中的方法:FileUtils.writeStringToFile(file, "第一行是\\n\n第二行是\\r\r第三行是\\n\\r\n\r第四行是\\r\\n\r\n第五行");将这部分内容分别写入到windows中记事本和Eclipse项目目录下的文件中 这是我的测试数据:第一行是\\n\n第二行是\\r\r第三行是\\n\\r\

const 在c及c++中应用

const 在c及c++中应用 const的定义:const是ANSI C中的的关键字,它限定一个变量不允许被改变,产生静态作用.使用const在一定程度上可以提高程序的安全性和可靠性,const在其它编程语言中也有出现,例如Pascal.C++.PHP5.BC#等. 一.const在c和c++中的基础用法 const 用于定义变量,当int const a=10;时此时变量a只有只读权利.这时a为只读,就不能为左值,即不能被赋值. ?? 注意此时const int a=10;与int cons

c#中和java中可变参数对比

c#中可变参数用关键字params Code public class App { static void Main() { //常规使用方法 Console.WriteLine( Add( new Int32[] { 1, 2, 3, 4, 5 } ) ); //另一种调用方法 Console.WriteLine( Add( 1, 2, 3, 4, 5 ) ); //当然,参数数目是可变的,但其类型是被约束的 Console.WriteLine( Add( 1, 2, 3, 4, 5, 6,

Linxu中和Windows中的文本格式

在Linux中新建的文本文件换行符是$ Windows中新建的文本换行符是^M$ 在Windows中编辑由Linux中创建的文本,新添加的内容仍然会以Linux的$的格式换行 将Windows下编辑的文本转换成Linux中的文本格式可以使用命令:dos2unix 文件名

input标签中和validate中存在required属性的对应的input输入框设置为红色

今天公司突然提出要将页面中必填的输入框设置成红色,开始是想省事点直接到页面上在必填的输入框中加入样式,这样需要一个一个也页面的改,而且感觉写的很死!后来经过讨论决定采用一种灵活的方式加入样式.经过一天的努力终于成功找到解决办法实现代码如下,虽然代码不长但是却花费了我一天的时间,在里面我又学到了许多知识. 通用方法代码: /** * 将页面中的必填选项输入框设置为红色 * @param form  表单名称 * @param validateOption  验证操作名 */ common.requ

对于Unicode编码在js中和html中

1.对于Unicode在js中 var a="\u9102WQW121" 中"\"是需要转义的,直接在页面输出的效果 var b=JSON.stringify(a); json化之后 对于将"\"转义之后 输出效果 前台接受json化之后的值是 对于链接上要Unicode传参数的话,这将会是一个麻烦, 所以如果要是放到js中的链接的话,链接会多出一个斜杠,对于Unicode编码不建议转json之后发送,除非后台能对其做相应处理 2.对于html