C语言之关键字const

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DataCow/article/details/71787232

在c语言中,关键字const 修饰变量,可以使变量的属性 常量化。

一个变量 m 在被const 修饰时 在初始化阶段就要对其进行赋值操作,因为一旦被 const 修饰过的变量,在程序的任何地方进行赋值操作都是非法的。

(当然也有例外,比如指针 或者被const修饰的形参)

 

const  int      m= 10;

int constm = 10 ;

以上两种写法都所表达的效果是一样的。

 

补充一点c指针:

        666             

                  -1                   

          10922             

                 100                 

     a—>100                     b—>104                      c—>108                      d—>112

变量名a 表示内存中地址为100的位置,b对应104,c对应108,d对应112.

int a = 666;

int b =-1;

int c =10992;

int *d =&a;//在内存空间中d位置存的数据是一个地址(100这个地址存的数据是666;

一个变量的值就是分配给这个变量的内存位置所存储的值。

再来说明一下(无论嵌套多少指针,认准这个原理一步一步追)

int *ptr;        //在内存中开辟一个名为ptr的地址,并且声明这是用来存地址的。
ptr = (int *)0x67a9; //把你要存的地址(0x67a9)放进名为ptr这个空间中来
*ptr = 0xaa55;// 地址(0x67a9)中存的数据就是(0xaa55)

 

但是当const 遇见指针(*)你会忍不住骂一句脏话,

但是记住记住一个原则,const修饰谁,你就不能动谁

const可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据,const和指针一起使用有一下三种模式:(ptr 沿袭上例的赋值)

1.            const int *ptr;

此时修饰的是一个指向常整型数的指针

也就是说const现在修饰的是 (*ptr)

你可以修改指针(ptr = (int *)0x67a9;)

但此时你不能修改指针所指向的值(*ptr = 0xaa55;)

2.            int const * ptr;

此时修饰的是一个指向整型常量的指针,

也就是说const现在修饰的是 (*ptr)

你可以修改指针(ptr = (int *)0x67a9;)

但此时你不能修改指针所指向的值(*ptr = 0xaa55;) 

3.           int *constptr;

此时ptr为一个指向整型的常量指针

Const修饰的是 ptr

即指针是常量,无法修改(ptr = (int *)0x67a9;)

但可以修改他所指向的整型值(*ptr = 0xaa55;)

 4.           int   const   *  const  ptr;

 这个例子中无论是指针,还是指针指向的值都被赋予常量的熟悉,无法修改。

 

const和指针结合的写法多少有点让人摸不着头脑,大家可以这样来记忆:const离变量名近就是用来修饰指针变量的,离变量名远就是用来修饰指针指向的数据,如果近的和远的都有,那么就同时修饰指针变量以及它指向的数据。

使用const的好处有那些(金坷垃好处都有啥)

l  关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。

l  使用关键字const也许能产生更紧凑的代码

l  合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现

猜你喜欢

转载自blog.csdn.net/DataCow/article/details/71787232