const在C语言和C++中的区别

一.C语言中的const

const是C语言中保留的一个关键字,它用来限定一个变量是只读的,即不可变的。程序中使用const可以在一定程度上提高程序的健壮性,但是程序中使用过多的const,可能在对代码的阅读时增加一定的难度。 “C中的const的意思是‘一个不能被改变的普通变量’,在C中,它总是占用内存,而且它的名字是全局符。C编译器不能把const看成一个编译期间的常量”

(1)用const修饰一般变量

注意在C语言中,用const修饰的变量必须在声明时进行初始化(用来修饰函数的形参除外);

void
fun(const int n); 正确

const char a; 错误

char * const p;  错误

const char *p;正确(注意这种为什么是正确的),因为这里const是修饰p指向的变量,而不是指针变量p本身

一旦一个变量被const修饰后,在程序中除初始化外对这个变量进行的赋值都是误的。

(2)const与指针搭配使用

首先必须弄清楚两个基础概念:指针常量和常量指针

指针常量:即指针本身的值是不可改变的,而指针指向的变量的值是可以改变的;

常量指针:即指针指向的变量的值是不可改变的,而指针本身的值是可以改变的;

可以这样去理解:因为指针本身也是一个变量,只不过指针存放的是地址而已,而一旦指针变成了常量,即指
 针本身的值是不可变的,此时指针只能指向固定的存储单元;指针一般会指向一个变量,如果该变量成为
 一个常量,那么该变量的值就不能被修改,即常量指针,指针指向的是一个不可变的变量。

总结:

(1)在C语言中用const去修饰一个变量,表示这个变量是只读的,不可通过显式的调用a去修改a的值,并且此时         a仍然是一个变 量,不能等同于常量;

(2)要注意const在声明变量时所处的位置,位置不同,在意义上可能会有很大的不同。

如果const在‘*‘左边,则表示指针指向的变量的值不可变;

如果const在‘*‘右边,则表示指针的值是不可变的;

二.C++中的const

C语言和C++中的const有很大区别。在C语言中用const修饰的变量仍然是一个变量;而在C++中用const修饰过后,就变成常量了。

  1. C++中,是否为const分配空间要看具体情况.

    如果加上关键字extern或者取const变量地址,则编译器就要为const分配存储空间.

  2. C++中定义常量的时候不再采用define,因为define只做简单的宏替换,并不提供类型检查.

C++编译器在通常情况下不为常量分配空间,而是将其值存放在符号表内.但当使用extern修饰常量时,则必须立即

为此常量分配空间(与之类似的情况还有取常量的地址等等).只所以必须分配空间,是因为extern表示"使用外部链

接",   这表明还会有其他的编译单元将会使用寻址的方法来引用它,因此它现在就必须拥有自己的地址.

Const在C和C++中最大的不同是,在C中,const默认具有外部链接,而C++中则是内部链接。所以当你只在定义

const常量的文件中使用该常量时,c++不给你的const常量分配空间,此时const
int c = 0;相当于#define c 0;

而在C中,它会给每个const 常量分配内存空间

时间: 2024-11-07 12:59:40

const在C语言和C++中的区别的相关文章

C语言和C++中动态申请内存

在C语言和C++的动态内存的使用方法是不同的,在C语言中要使用动态内存要包含一个头文件即 #include<malloc.h> 或者是#include<stdlib.h> 然后用C语言的系统函数 void * malloc(usigned size);来获得动态分配的内存,这个函数参数是需要申请的内存的字节数,返回的是一个申请到的内存的首地址,这个返回的内存的类型是 void ,所以需要根据需要进行强制类型转换,例如 int *array; array= (int *)malloc

&lt;密码的实现&gt;在C语言和C++中如何实现输入数字或字符的时候,在指令框中不显示您输入的内容,显示“*”

一开始我以为用C语言和C++不能实现使用者输入密码的时候显示出“*”呢!在制作网页的时候可以设置属性为“password”,就可以不显示使用者输入的内容了..没想到偶然的机会试出了用while循环结构可以实现.以下是C语言和C++的代码,供初学者参考. 这是C语言实现的代码: 1 #include <stdio.h> 2 #include <conio.h> 3 int main() 4 { 5 int c; 6 char str[100], *p = str; 7 while (

c语言和c++有什么区别

差不多是win98跟winXP的关系.C++是在C的基础上增加了新的理论,玩出了新的花样.所以叫C加加. C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制. 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样.之所以说C++比C更先进,

详解C语言和C++最大的区别,附带新手学习建议

首先,我们来看看C语言与C++的概念: C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点.它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大.中.小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序.它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入

1000道C语言和C++语言的练习题及答案 #0000-0050

汇集1000道C语言和C++语言的练习题 (例题.笔试题.编程题.算法设计题),由我亲自配上答案(点此查看). 语法题我就不出了,那个没意思,看书就可以了. 本贴汇集50题 (0000-0050),持续更新... 0001. 抽签题 从10个数中随机抽取5个数.(相当于双色球抽签问题) 0002. 插入排序 已有10个按增序排列好的整数1,3,5,7,9,11,13,15,17,19.要求把一个整数n插到数组中,保持增序排列. 0003. 数学公式类计算题 已经圆柱体的底半径r,高h,求体积v.

C语言和PHP语法相异点

C语言和PHP语法相异点技术 maybe yes 发表于2015-02-05 16:09 原文链接 : http://blog.lmlphp.com/archives/80  来自 : LMLPHP后院 PHP 的语法规则和 C 语言语法规则非常的相似,PHP 中很多内部函数调用的就是原生的 C 语言函数.由于两种语言的运行方式不同,导致在某些情况下语法也有一些差异,下面列举几个. 获取全局变量方式不同 在作用域中获取全局变量的值,PHP 必须借助 global 关键字获取或者使用超全局变量 $

用Swift语言和Sprite Kit复制微信飞机大战游戏

先上GitHub链接: https://github.com/songrotek/PlaneWar.git 接下来稍微讲解一下! 这个程序还有点Bug,见谅! 1 说明 游戏采用了Sprite kit最新的Per pixel for physic 技术,就是直接使用texture纹理作为sprite的physics body . 游戏的texture.atlas从别的打飞机项目中拷之并辛苦地分解了. 游戏编写借鉴了网上的objc代码! 2 游戏编写过程 添加背景-> 添加控制的飞机-> 添加发

C语言和matlab

分别用C语言和matlab实现二分法查找数据 从形式上能够发现区别是,matlab是一句一句编译的,而c语言是对一个完整的代码段进行编译的,并且c中有头文件(#include(...)),而matlab中没有,对于数值运算matlab是很简便强大的,c就有点繁琐,对于算法要求c相对更高点. 具体例子如下: C语言 #define M 10 #include<stdio.h> void main(){ static int a[M]={-12,0,6,16,23,56,80,100,110,11

Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较

Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较 1.首先写一个Go语言的简单WEB程序,就返回一个HelloWord! package main import ( f "fmt" "log" "net/http" // "strings" ) func sayhelloName(w http.ResponseWriter, r *http.Request) { // r.ParseForm() // f.P