目录
5:const既修饰指针变量类型又修饰指针(即常量指针常量)
一、const的简单介绍
const含义:只要一个变量前用const来修饰,就意味着该变量里的数据只能被访问,而不能被修改,也就是意味着“只读”(readonly)。
const作用:
1:可以用来修饰变量,修饰函数参数,修饰函数返回值,且被const修饰的东西,都受到强制保护,可以预防其它代码无意识的进行修改,从而提高了程序的健壮性
2:使编译器保护那些不希望被修改的参数,防止无意代码的修改
3:增强代码的可读性
二、const关键字的用法
1:const修饰全局变量
此时全局变量只能使用不可修改,直接修改(编译报错)与修改地址(程序异常)都不行
#include <stdio.h>
//const修饰全局变量
//此时全局变量只能使用不可修改,直接修改(编译报错)与修改地址(程序异常)也不行
const int a = 100;
void test1()
{
printf("a = %d\n", a);//直接使用
//a = 666;//直接修改,编译报错,显示a是只读的
//printf("a = %d\n", a);
//int *p = &a;
//*p = 888;//通过地址修改,程序异常,有些编译器可能只会显示警告,并不会报错,且程序能正常运行,但是不会显示任何结果
//printf("a = %d\n", a);
}
int main(int argc, char *argv[])
{
test01();
return 0;
}
直接使用
这是直接修改a,编译报错
通过地址修改a的值出现的警告(有些编译器则不能通过编译,会直接报错)
运行结果(并未显示任何东西)
2:const修饰普通局部变量
不可直接修改变量的值(编译报错),但是可以通过地址进行修改
#include<stdio.h>
//const修饰普通局部变量
//不可直接修改(编译报错),但是可以通过地址进行修改
void test2()
{
const int b = 100;
printf("b = %d\n", b);
//b = 666;//直接修改,编译报错
//printf("b = %d\n", b);
int *p = &b;
*p = 888;//通过地址进行修改
printf("b = %d\n", b);
}
int main(int argc, char *argv[])
{
test2();
}
直接修改(编译报错)
通过地址修改
3:const修饰指针变量的类型(即常量指针)
int a = 100;
const int *p = &a;
或
int const *p = &a;
const修饰指针变量的类型,可直接修改变量值,不可修改指针指向的地址里的内容(编译报错),可以修改指针的指向
#include<stdio.h>
void test3()
{
int c = 100;
const int *p = &c;
printf("c = %d\n",c);
c = 666;//可以直接修改变量的值
printf("c = %d\n",c);
//*p = 888;//不可修改指针指向的地址里的内容,编译报错
//printf("c = %d\n",c);
int d =999;
p = &d;//可以修改指针的指向
printf("*p = %d\n",*p);
}
int main(int argc, char *argv[])
{
test3();
}
直接修改变量的值
通过指针修改地址里面的值(编译报错)
修改指针指向
4:const修饰指针变量(即指针常量)
int a = 5;
int * const p = &a;
可以直接修改变量的值,可以修改指针指向地址的内容,但是不能修改指针的指向(编译报错)
#include<stdio.h>
void test4()
{
int c = 200;
int * const p = &c;//const修饰指针,即指针常量
printf("*p = %d\n",*p);
c = 666;
printf("c = %d\n",c);//直接修改值
printf("*p = %d\n",*p);
*p = 888;//修改指针指向地址里的内容
printf("*p = %d\n",*p);
int d =999;
//p = &d;//不能修改指针的指向,编译报错
//printf("*p = %d\n",*p);
}
int main(int argc, char *argv[])
{
test4();
return 0 ;
}
直接修改变量值
修改指针指向地址的内容
修改指针指向(编译报错)
5:const既修饰指针变量类型又修饰指针(即常量指针常量)
int a = 100;
const int * const p = &a;
可直接修改变量值,不能修改指针指向地址的内容,不能修改指针指向
#include<stdio.h>
void test5()
{
int c = 200;
const int * const p = &c;//即修饰指针变量类型又修饰指针变量
printf("*p = %d\n",*p);
c = 666;//可以直接修改值
printf("c = %d\n",c);
printf("*p = %d\n",*p);
//*p = 888;//不能修改指针指向地址里的内容,编译报错
//printf("*p = %d\n",*p);
//int d =999;
//p = &d;//不能修改指针指向,编译报错
//printf("*p = %d\n",*p);
}
int main(int argc, char *argv[])
{
test5();
return 0;
}
直接修改变量值:
修改指针指向地址的内容:
修改指针指向:
三、总结
对于const关键字的使用,我这里只介绍了修饰全局变量、修饰局部变量以及修饰指针的用法,因为这些用法较多,而修饰函数则需大家再做研究。同时一般在初学阶段基本很少使用const关键字,大家在进入工作或是一些较复杂的项目中才会经常使用,所以大家可以在初学阶段尝试使用,养成良好习惯。