Const也是应该广泛的关键字,表示后面定义有可能是一个不变的常量,但是跟各种数据类型定义组合,能演变出复杂含义.Const 主要有如下应用情况1. 声明后面是一个常量2. 如果跟指针组合,将形成复杂的组合情况3. 作函数参数数的修饰符.表示不能修改这一参数的值.主要是指针4. 作函数返回值, 表示调用函数不能修改这一参数数的值.主要是指针Const 让人感到复杂是的,他的位置可以与被修饰的数据类型互换!其它的修饰符没有这样用法.这样换一般情况下是等效的,如 const int c1= 5; 等效于 int const c1=5;但是,我说是但是,如果数据类型是一个指针,互换一样位置表示完全不同含义,所以const 这 一个用法经常是面试官用来折磨嵌入式C面试者的法宝之一.参看如下定义 int b = 500; const int* a = &b; [1] int const *a = &b; [2] int* const a = &b; [3] const int* const a = &b; [4]这种定义要看 const 的位置来确定他的用法.const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的 右侧,const就是修饰指针本身,即指针本身是常量。因此,[1]和[2]的情况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无 关),这种情况下不允许对指针指向内容进行更改操作,如不能*a = 3 ;[3]为指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如a++是错误的;[4]为指针本身和指向的内容均为常 量。Const的初始化 Const 在运行时不能修改值,所以只能在定义时进行初始化.作为参数和返回值的const修饰符 其实,不论是参数还是返回值,道理都是一样的,参数传入时候和函数返回的时候,初始化const变量1 修饰参数的const,如 void fun0(const A* a );表示a的指向内容不准修改的. 2 修饰返回值的const,如const A * fun2( );表示a指南内容不准备修改 Const 的好处是•关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)• 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。• 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。Const 一大副作用是,在函数调用时,你必须要把参数调成const 所要求的形式才能被编译调用.有时这样花很大功夫才能做到
关键字:C语言 类型修饰符 Const
引用地址:
C语言类型修饰符Const的使用
推荐阅读最新更新时间:2024-03-16 14:27
用单片机C语言精确延时(定时)的方法
本人在闲暇的时候对单片机C语言下的各类延时程序做了下总结。由于单片机C语言下利用软件延时不容易做到精确的定时,所以很多人在编写延时子程序的时候不能好好的把握延时的具体时间。C语言下,延时程序主要有以下几种: 一: void delay(unsigned char k) { unsigned char i,k; //定义变量 for(i=0;i k;i++); //for循环语句 } 该程序在Keil环 境下, 会先将C语言转化成汇编语言 , 那么我们就可以根据汇编语言来计算出精确的时间,转化具体步骤如下: CLR A ;指令1 MOV R7,A ;指令2 LOOP: INC R7 ;
[单片机]
单片机C语言 串口传输 结构体
串口传输 结构体 就是 把结构体 转换为 数组 ,然后传输 数组中的 char。 即 struct - - - - - - - char ; 然后 char - - - -- - - - -- struct . 给出一下简单实例代码 : #include stdio.h #include stdlib.h /*--------------------------start file---------------------------------*/ typedef struct { int id; char name ; int score; }student; int struct_ar
[单片机]
C语言实现51单片机中的PID算法
//pid.h #ifndef __PID__ #define __PID__ /*PID = Uk + KP* +KI*E(k)+KD* ;(增量型PID算式) 函数入口: RK(设定值),CK(实际值),KP,KI,KD 函数出口: U(K)*/ typedef struct PIDValue { int8 KP; int8 KI; int8 KD; int8 F; int8 BITMOV; int EK ; int UK; int RK; int CK; int UK_REAL; }pid_str; //PIDValueStr PID; void pid_exe(pid_str *PID) ; #
[单片机]
如何用C语言操纵AVR的IO端口(以ICCAVR为例)
举例一:将PB0定义为输出,且输出为高电平 DDRB=BIT(0);//定义 PB0为输出 PORTB|=BIT(0);// PB0 输出高电平 举例二:将PB0、PB1定义为输出,且PB0输出低电平,PB1均为高电平 DDRB|=BIT(0)|BIT(1);//定义 PB0、PB1为输出 PORTB|=BIT(0)|BIT(1);// PB0、PB1 输出高电平 举例三:将PB0数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1 PORTB^=BIT(0);//PB0 输出高电平 与0异或,不变,与1异或,原来0的为1,1的为0 举
[单片机]
51单片机C语言中.c文件和.h文件的关联
1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明; 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h)。 2)h文件里应该有什么 常量,结构,类型定义,函数,变量申明。 3)h文件不应该有什么 变量定义, 函数定义。 4)extern问题 对于变量需要extern; 对于函数不需要因为函数的缺省状态是extern的.如果一个函数要改变为只在文件内可见,加static。 5)include包含问题 虽然申明和类型定义可以重复,不过推荐使用条件编译。 #ifndef _FILENAME_H, #define _F
[单片机]
51单片机C语言学习 6
第六课 变量 上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下: 数据类型 变量名表 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课《变量的存储》中进一步进行学习。 而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一
[单片机]
C语言一百例第十九例
代码: /* C语言第19例 题目:一个数如果恰好等于它的因子之和,这个数就称为 完数 。例如6=1+2+3.编程找出1000以内的所有完数。 程序分析:请参照:C 练习实例14。 */ #include stdio.h #define N 1000 int main() { int i,j,k,n,sum; int a ; for(i=2;i =N;i++) { sum=a =1; k=0; for(j=2;j =(i/2);j++) { if(i%j==0) { sum+=j; a =j; }
[单片机]
51单片机的走马灯C语言程序
#include REG52.H unsigned char RunMode; void Delay1ms(unsigned int count) { unsigned int i,j; for(i=0;i count;i++) for(j=0;j 120;j++); } unsigned char code LEDDisplayCode = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //0~7 0x80,0x90,0x88,0x8
[单片机]