在c语言中的const是一个比较有意思的存在,明明一点作用都不起,但是却作为一个关键字离奇存在。
值得注意的是,在C++中优化了const的用法,这里只针对C语言中的const用法,写一下自己的看法。
第一种 const int a
const int a和 int const a表达效果一致。
//采用ubuntu16.04 gcc编译
#include<stdio.h>
int main()
{
const int a = 10;
//a = 20; 这里直接修改会报错,因为a是const类型
int *p = (int*)(&a);//可以通过指针进行修改const变量
*p = 20;
printf("a=%d\n",a);
return 0;
}
注意:在gcc编译器中,没有int* 的强制类型转换会存在程序报错的可能。
第二种 const int *p = &a
#include <stdio.h>
int main()
{
int a = 10;
int b = 100;
const int *p =&a;
// *p = 20;不能修改指针指向的地址的值
p = &b;//可以修改指针的指向
printf("*p = %d \n",*p);
return 0;
}
第三种 int * const p = &a
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int *const p = &a;
// p=&b; //不能修改指针的指向
*p = 100;//可以修改指针指向的值
printf("*p=%d\n", *p);
return 0;
}
第四种 const int * const p =&a;
理论上来说,这种既不能修改指针的指向,也不能修改指针指向地址的值,但是通过二级指针,仍然可以起到修改*p 的效果。
总结:const在C语言中几乎是一个没有作用的存在。