C语言关键字const的几种用法

嵌入式技术

1332人已加入

描述

本期来讲解一个C语言的关键字——const。

主要内容:

结合示例说明const的几种用法。

适合人群:

C语言初学者、嵌入式萌新。

const是C语言的常用关键字之一,是单词constant(翻译为“常量的”)的缩写,它限定一个变量不允许被改变,使用const在一定程度上可以提高程序的安全性和可靠性。

用法:在定义变量时加上const,修饰该变量为常变量。为什么叫做常变量呢? 因为const 修饰的对象原本是变量,但经过修饰将不能直接改变它的值(如常量一般);但又有变量的属性,所以叫常变量。

Part 1

使用const修饰局部变量

比如在函数中定义以下内容:

const int b = 1;

上方这句话执行后,将不能再对b进行赋值来修改它的值了。所以被const修饰的变量一般需要进行初始化!为其提供初始值。

CONST

当const和指针定义结合在一起时,有即种经典组合形式,是必须要掌握的!

char a = 'a';

    char b = 'b';

① const char *p = &a;

(或写成    char const *q = &a;)

② char * const r = &a;

以上两种形式的区别在于const修饰的空间不同,

表达式① const是修饰p的空间为只读,不可以修改p的值,但可以修改p的值。

即 *p = 5; ✖ p = &b;✔

表达式② const是修饰q的空间为只读,不可以修改q的值,但可以修改*q的值。

即 q = &b;✖ *q = 5; ✔

Part 2

修饰函数的参数

根据const和指针结合形式,const修饰函数的参数也是分为三种情况

1、防止修改指针指向的内容

char *strcpy( char *to, const char *from );

给参数from 加上 const 修饰后,如果函数体内的语句试图改动指针from所指向的空间,编译器将指出错误。

2、防止修改指针指向的地址

void swap ( int* const p1 , int* const p2 )

指针p1和指针p2指向的地址都不能修改。

3、以上两种的结合。

void func(const int *const p);

这种情况下,在函数体中将不能改变p的值,亦不能改变*p的值。

Part 3

修饰全局变量

全局变量的作用域是整个文件,一般情况下要少用全局变量,若工程中的某一个函数改变了全局变量的值,它也会影响到工程中其他引用这个变量的函数,这导致不易排查bug。若必须使用全局变量,就需要考虑是否给该变量加上const,使其数值不被修改。

比如:

const int global_width = 320;

Part 4

可以修改只读变量的值吗?

不能直接通过原标识符修改(变量名),但可以通过非const修饰的指针,间接修改。

#include < stdio.h >


int main(void)
{
  const int a = 1;  //被const修饰的变量可以被初始化
  int* p = &a;
  //a = 2;      //被const修饰的变量不能被直接赋值
  *p = 5;        //可通过非const指针间接修改
  printf("a = %d\\n", a);
  return 0;
}

运行结果:

CONST

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分