C语言之const关键字

const关键字在C代码中很常见,下面总结一下其作用:

1、将一个变量声明为常量,即只读的。这一点跟#define 是相似的,如:   const int a;

这时候,a就被视为一个常量,具有不可修改的性质。这个声明的问题是没有对a初始化,编译器给a分配的空间,以前是什么值,默认就是什么值,所以以后要给a赋值会报错。

恰当的声明应该是这样的:     const int a = 3;

即,声明的同时进行初始化。需要注意的是,int const a = 3; 效果是一样的,在这种情形下,const和数据类型的位置可以颠倒。

2、修饰指针变量

稍微介绍一下指针。指针就是地址,而所谓地址,就是一串数字,但是这个数字却标示了内存中的一个存储单元。要知道内存中的每个存储单元都是有编号的。当然,存储单元里面存放的内容本质上也是一串数字,但必须搞清楚,存储单元的编号和内容不是一回事,或者说没有什么关系,因为它们的解读方式不同。

由于表示地址的数字太长,不容易记忆,所以C语言使用了变量名称来代替这个数字。可以知道,在编译阶段,每个变量名称都是要最终替换成某个“数字地址”的,也就是说,变量名和某个存储单元的地址是绑定的、对应的。

先看第一种情况: int  *const a;   那么a是一个变量,存放一个指针类型的数据,即地址值。这个地址值所代表的存储单元存放一个int型数据。现在a被const修饰了,于是有些东西不能修改了。那么到底是a中存放的那个地址不能修改还是这个地址对应的存储单元里面的数据不能改?答案是前者,即a中存放的只能是某个地址,不能改,只与这个地址中存放什么值无所谓,随便改。用代码表示的话,a不能再赋予其他地址值,但是 *a 可以随便赋值。a 和 *a
分别代表什么大家都很清楚。

第二种情况:const int  *a;   这个时候,不能改的不是a中的那个地址值,而是这个特定的地址中的内容不能改,与上一种情况正好相反。于是,a可以再赋予其他地址值,但是a的值没有改变之前,*a 是不能改变的。(注:int const *a和这种声明效果一样,所以本质区别是*号挨着变量还是const)

第三种情况:const int *const a; 显然,谁都变不了了。

3、修饰函数形参

这种经常见于函数的形参是数组或指针的情况,为了防止函数修改传递过来的数组内容或指针内容(2中的第二种情况)被意外修改,于是加上const限定,如:int FindNum(const int array[], int num, int conut);

4、待补充。

时间: 2024-10-13 14:16:58

C语言之const关键字的相关文章

一起talk C栗子吧(第一百六十四回:C语言实例--const关键字)

各位看官们,大家好,上一回中咱们说的是三目运算符的例子,这一回咱们说的例子是:const关键字 .闲话休提,言归正转.让我们一起talk C栗子吧! 我们在前面章回中介绍了很多系统编程接口,在这些接口的参数中经常出现const关键字,有看官对此提出了疑问"这些const有什么用处呢?".今天,我将和大家一起来解决该疑问. 在C语言中const是一种修饰符,经常用来修饰变量.使用它修饰以后的变量,就成为常量.常量是不允许被修改的.下我们举个简单的例子来说明const的用法. 1 #inc

c语言const关键字

作者:沉默羔羊 c语言const关键字: --  特点. 使用该关键修饰的变量不能被改变.      --指针常量. demo:   const char *p或者是 char const * p --常量指针. demo: char * const p      --常量指针和指针常量. 1.常量指针指的是如 char * const p, p是一个常量,p不能改变指向. 2.指针常量指的是如char const *p,   p指向一个字符常量,p可以改变指向.但是不能改变*p. --对于常量

C语言之头文件,static与const关键字

[前言] 最近几个月在做一个C语言代码重构的项目,过程中也让我对之前在书本上学习到的东西有些补充和巩固,在本博中总结记录下,梳理下零碎的知识点和经验也加深印象,书写是为了更好地思考.平时也都是用印象笔记之类的自己写写笔记,今天整理成博客,以便自己以后回顾. [正文] C语言头文件:将其理解为C语言模块化编程向外提供一个接口描述文件.一般包括一些供外部函数或者文件使用的变量声明,函数声明,数据类型定义以及宏定义等.举例: /*************************************

C 语言 const 关键字

#include <stdio.h> int main(void){ int i = 1; int j = 100; const int * temp = &i; printf("%d\n",*temp); i = 2; printf("%d\n",*temp); temp = &j; printf("%d\n",*temp); return 0; } 输出 12100 #include <stdio.h>

【C语言天天练(十四)】const关键字详解

const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性,另外,了解const的作用,在看别人的代码时,对理解对方的程序有一定帮助. 1.const可以理解成是"只读变量"的限定词,从这里可以看出,const修饰的是变量,跟常量是不同的,常量是被编译器放在内存中的只读区域,当然也就不能够去修改它.而"只读变量"则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改.const就是用来限定一

C语言32个关键字总结

C语言32个关键字  第一类:数据类型关键字 A基本数据类型(5个) void 声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果. char 字符型类型数据,属于整型数据的一种.int 整型数据,通常为编译器指定的机器字长.float 单精度浮点型数据,属于浮点数据的一种,小数点后保存6位.double 双精度浮点型数据,属于浮点数据的一种,比float保存的精度高,小数点后保存15/16位. B类型修饰关键字(4个) short 修饰int,短整型数据,可省略被修饰的int. lon

C语言的那些关键字

C语言有一堆关键字,一共n个,就在下面: 1.类型关键字 系统内置类型:long short int char float double void long:32位整数,默认为有符号,下同 short:16位整数 int:根据机器而定是32位还是16位整数,现在的一般都是32(常用) char:8位字符(常用) float:32位小数(单精度) double:64位小数(双精度)(常用) void:无(变量只能用于void*,函数返回类型可以用void)(常用) 自定义类型:struct uni

const关键字和指针的纠缠

const关键字定义的变量 #include<stdio.h>int  main( void ) {    const int a = 10;     a = 20; }12345671234567 结果怎样? 编译错误 [Error] assignment of read-only variable 'a' 变量a是只读的. 得到一个结论,使用const修饰的变量是常量,我们无法修改.在gcc中把const常量放到了data段,和全局变量一样,只是把它放到了一个区域中让我们无法修改,在运行过

C语言-拾遗(1) 关键字 &amp;&amp; 运算符

关键字 extern static const typedef define sizeof union extern表示的是"已经存在一个变量,但是不在当前的编译单元内,需要在其他编译单元中寻找." extern尽量写到.h文件中Extern语句频繁的用于在多个文件之间的跨范围数据传递 static会定义一个变量 1)修饰局部变量便存放在静态数据区 2)修饰全局变量(使得该变量只能本源文件可见) 对于一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问(只