c语言中的const关键字作用及用法_详细+例子

目录

一、const的简单介绍

二、const关键字的用法

 1:   const修饰全局变量

 2:const修饰普通局部变量

 3:const修饰指针变量的类型(即常量指针)

 4:const修饰指针变量(即指针常量)

 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关键字,大家在进入工作或是一些较复杂的项目中才会经常使用,所以大家可以在初学阶段尝试使用,养成良好习惯。

  • 27
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值