C语言感悟之const

来源:互联网 发布:图像处理滤波器java 编辑:程序博客网 时间:2024/05/16 01:31

  • 1简介
  • 2用法
    • 1 const用来修饰普通变量
    • 2 const常量指针与指针常量
      • 21常量指针
      • 22指针常量
    • 3 const用来修饰函数参数
  • 3总结

1、简介

const :限定符,它把一个对象转换成一个常量。const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。

令人又爱又恨的const

2、用法

2.1 const用来修饰普通变量

有定义如下

const int Val=5;int const Val=5;

以上两种写法,效果是一样的,含义都是:不能通过Val这个变量名,来修改该地址的值;C语言与其他高级语言的区别就是它是直接操作内存的功能,即定义了Val,那么编译器就会开辟一个int型的内存来存放5,Val此时便作为这块内存的地址别名

由于Val的修饰关键字是const,此时如果我们用 Val=10;编译器将报错,那么有没有其他方法可以修改这块内存的值呢?答案是 不一定:在VC++ 6.0中,是可以通过以下操作来修改Val的值,而在VS和DEVC++中却会报错,这不知道算不算VC6.0的BUG…

定义一个指针,使它指向Val这块内存

int *p = &Val;*p=10;printf("%d\n",Val);/* 此时Val的值由5变为10 */

2.2 const常量指针与指针常量

一开始看到这个我也是懵逼的,后来网上有个dalao说这样记:以 * 为划分,const在 * 左边的,即为常量指针;const在 * 右边的,即为指针常量;

const int* Val = 5; //常量指针int* const Val = 5; //指针常量

2.2.1常量指针

const用来一个修饰变量指针,便成为一个常量指针,写法如下:

const int* Val;int const* Val;

它的含义是:不能通过这个指针来修改这个变量的值,但是可以通过其他的方式来修改变量的值:

    int Num = 0;    const int* Val = &Num; //Val的值为0;    Num = 10;              //Val的值此时变为10;

常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。可以通过使该指针指向其他地址

    int Num_0 = 1;    int Num_1 = 2;    const int* n = &Num_0; //*n的值为1;    n = &Num_1;            //*n的值为2;

2.2.2指针常量

const写在 * 的右边,含义是:这个指针本身是个常量,指向的地址不能改变;但是它所指向的地址的值却是可以改变的。
写法如下:

int* const Val;

我们可以通过其他指向该地址的指针来改变地址的值

    int a=0;    int *p=&a;    int *const c = &a;//c的值为0;    *p=10;            //c的值为10;

2.3 const用来修饰函数参数

const用来修饰函数中的传入参数

int Function(int* arg,const int* str)//防止函数体中改变str的值int Function(int* arg,int* const str)//str指向的地址不能被改变

3、总结

1、常量指针含义是:不能通过这个指针修改变量的值,可以通过直接操作内存的方式或者令指针指向其他地址的方式来修改变量的值。 (2.2.1)
2、指针常量的含义是:指针指向的地址不能改变,但是可以通过其他同样指向该地址的指针来修改值。 (2.2.2)
3、个人愚见:合理应用常量指针和指针常量修饰函数的传入参数,可以避免函数体中对传入参数的修改,适合用于一些重要数据的保存与发送的场合。

原创粉丝点击