当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > const的作用

const的作用 时间:2019-05-24      来源:华清远见

在c语言中,关键字const修饰变量,可以使得变量常量化。所谓的常量化,就意味着“readonly”。

它的规则:const离谁近,谁就不能被修改

下面我们一起来通过示例来看下:

一、const修饰变量

  1 #include <stdio.h>                                                       

  2                                      

  3 int main(int argc, const char *argv[])

  4 {

  5     const int a = 10;

  6     int const b = 10;

  7 

  8     printf("a = %d,b = %d\n",a,b);                                          

  9     return 0;

 10 }

程序运行结果如下:

yxl@ubuntu:~$ gcc test.c 

yxl@ubuntu:~$ ./a.out 

a = 10,b = 10

现在我们对变量进行下修改

  1 #include <stdio.h>

  2 

  3 int main(int argc, const char *argv[])

  4 {

  5     const int a = 10;

  6     int const b = 10;

  7 

  8     a = 20;

  9     b = 30;                                                                 

 10 

 11     printf("a = %d,b = %d\n",a,b);

 12     return 0;

 13 }

程序运行结果如下:

yxl@ubuntu:~$ gcc test.c 

test.c: In function ‘main’:

test.c:8:4: error: assignment of read-only variable ‘a’

  a = 20;

    ^

test.c:9:4: error: assignment of read-only variable ‘b’

  b = 30;

^

上面两种写法都是允许的,变量a和b有const修饰,则a和b的值不能被修改。

二、const修饰指针

1.常量化指针目标表达式,限制通过指针改变其目标的数值。一般形式如下:

const  <数据类型> *<指针变量名> [=<指针运算表达式>] 

请看下面示例代码:

  1 #include <stdio.h>

  2 

  3 int main(int argc, const char *argv[])

  4 {

  5     int a = 10,b = 20;

  6     const int *p;

  7 

  8     p = &a;

  9     printf("a = %d,*p = %d\n",a,*p);

 10 

 11     p = &b;                                                                 

 12     printf("b = %d,*p = %d\n",b,*p);

 13     return 0;

 14 }

程序运行结果如下:

yxl@ubuntu:~$ gcc test.c 

yxl@ubuntu:~$ ./a.out 

a = 10,*p = 10

b = 20,*p = 20

现在我们对指针的目标进行修改:

  1 #include <stdio.h>

  2 

  3 int main(int argc, const char *argv[])

  4 {

  5     int a = 10,b = 20;

  6     const int *p;

  7 

  8     p = &a;

  9     printf("a = %d,*p = %d\n",a,*p);

 10 

 11     p = &b;

 12     printf("b = %d,*p = %d\n",b,*p);

 13 

 14     *p = 30;

 15     printf("*p = %d\n",*p);                                                 

 16 

 17     return 0;

 18 }

程序运行结果如下:

yxl@ubuntu:~$ gcc test.c 

test.c: In function ‘main’:

test.c:14:5: error: assignment of read-only location ‘*p’

  *p = 30;

     ^

通过以上测试,我们没有办法通过p来改变目标地址的内容,最常见的用法就是main函数的参数。

2.常量化指针变量

常量化指针变量,是的指针变量存储的地址值不能修改,一般说明形式如下:

<数据类型> * const  <指针变量名> [=<指针运算表达式>] 

请看下面示例代码:

  1 #include <stdio.h>

  2 

  3 int main(int argc, const char *argv[])

  4 {

  5     int a = 10;                                                             

  6     int * const p = &a;

  7 

  8     printf("a = %d,*p = %d\n",a,*p);

  9     return 0;

 10 }

程序运行结果如下:

yxl@ubuntu:~$ gcc test.c 

yxl@ubuntu:~$ ./a.out 

a = 10,*p = 10

现在我们来修改下代码:

  1 #include <stdio.h>

  2 

  3 int main(int argc, const char *argv[])

  4 {

  5     int a = 10,b = 20;

  6     int * const p = &a;

  7     p = &b;                                                                 

  8 

  9     printf("a = %d,*p = %d\n",a,*p);

 10     return 0;

 11 }

程序运行结果如下:

yxl@ubuntu:~$ gcc test.c 

test.c: In function ‘main’:

test.c:7:4: error: assignment of read-only variable ‘p’

  p = &b;

^    

通过以上示例,我们可以看出此时指针变量的指向是不可以修改的。

3.常量化指针变量及其目标表达式,一般说明形式如下:

const <数据类型> * const  <指针变量名> [=<指针运算表达式>] 

请看下面示例代码:

  1 #include <stdio.h>

  2 

  3 int main(int argc, const char *argv[])

  4 {

  5     int a = 10;                                                             

  6     const int * const p = &a;

  7 

  8     printf("a = %d,*p = %d\n",a,*p);

  9     return 0;

 10 }

程序运行结果如下:

yxl@ubuntu:~$ gcc test.c 

.yxl@ubuntu:~$ ./a.out 

a = 10,*p = 10

现在我们来修改下代码:

  1 #include <stdio.h>

  2 

  3 int main(int argc, const char *argv[])

  4 {

  5     int a = 10,b = 20;

  6     const int * const p = &a;

  7 

  8     p = &b;

  9     *p = 30;

 10                                                                             

 11     printf("a = %d,*p = %d\n",a,*p);

 12     return 0;

 13 }

程序运行结果如下:

yxl@ubuntu:~$ gcc test.c 

test.c: In function ‘main’:

test.c:8:4: error: assignment of read-only variable ‘p’

  p = &b;

    ^

test.c:9:5: error: assignment of read-only location ‘*p’

  *p = 30;

     ^

通过以上示例,我们可以看出,此时指针的指向和目标的内容都不可以修改。

上一篇:C语言scanf函数用法

下一篇:什么是结构体

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2018 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号

回到顶部

有位老师想和您聊一聊