const是C语言里面的关键字,用来限定一个不被改变的变量。可以在一定程度上提高程序的安全性和可靠性。
const只修饰其后的变量,至于const放在类型前还是类型后并没有区别。例如const type biaozhifu 和type const biaozhifu 都是可以的,const都是用来限定标识符biaozhifu的,其中type是biaozhifu的数据类型。
/**********************************************
*函数功能:测试const用法。
**********************************************/
#include<stdio.h>
int main(void)
{
const char me;
printf("%X\n",&me);
char const you;
printf("%X\n",&you);
return 0;
}
其结果如下:
const和指针一起使用是C语言中一个很常见的困惑之处。
第一种情况:const int *p1 ,在这种情况下p1的值可以改变,即p1可以进行转向指向其他地址,而*p1是不可以改变的,即不能通过*p1修改原来存储的值。
/**********************************************
函数功能:测试const用法。
**********************************************/
#include<stdio.h>
int main(void)
{
int me=0;
int you=1;
const int *p1;//此时p1可有指向其他地址,但是*p1不能改变原来存储的值
p1=&me;
printf("%X\n",p1);
p1=&you;
printf("%X\n",p1);
return 0;
}
运行结果如下:
当尝试着修改函数体内语句为:*p1=3;时,编译就会报错:D:\书籍\C\C语言入门\test1.c|14|error: assignment of read-only location '*p1'。
第二种情况:int *const p2=&me ,在这种情况下,p2的值不能改变,即p2不能够重新转向指向其他位置,但是*p2可以改变,即可以通过*p2修改原来存储的值。
/**********************************************
函数功能:测试const用法。
**********************************************/
#include<stdio.h>
int main(void)
{
int me=0;
int you=1;
int *const p2=&me;//p2不可以改变,即不能指向其他地址,但是可以用*p2修改原来存储的值
*p2=3;
printf("%X\n",*p2);
return 0;
}
运行结果如下:
当尝试修改函数体内语句为:p2=&you; 时,编译会报错:D:\书籍\C\C语言入门\test1.c|12|error: assignment of read-only variable 'p2'。
第三种情况:const int *const p3=&me; 在这种情况下p3不能被改变,即p3不能重新转向指向其他地址,*p3也不能被改变,即不能通过*p3修改原来存储的值。
/**********************************************
函数功能:测试const用法。
**********************************************/
#include<stdio.h>
int main(void)
{
int me=0;
int you=1;
const int *const p3=&me;//p3不可以改变,即不能重新转向,*p3不可以修改原来存储的值
printf("%X\n",p3);
printf("%X\n",*p3);
return 0;
}
运行结果如下:
在这种情况下,如果修改函数体内语句为:p3=&you; 或者*p3=4; 时,编译都会报错。