在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的出现