【C语言const关键字】

C语言之const关键字

前言:
为了理解const的作用,可以把它比作一个箱子的锁;当我们自己使用箱子的时候,可以正常使用。
当我们不想给别人想使用箱子时,就上一把锁,那么别人就拿不到箱子里的东西,使得东西安全的放在箱子里。

/知识点汇总/

1、什么是const?

概念
const是用来限定一个变量不允许被改变的修饰符
作用
被const关键字所修饰的变量,它的值不能被改变,在整个作用域中都保持固定。
注意
const — 修饰变量,这个变量就被称为常变量,使得变量不能被修改了,但本质上仍然是变量

2、const的用法

主要分为两类
a、const作常量的修饰符
b、const修饰函数的参数

2.1、const作常量的修饰符例程1

修饰格式:
关键字 + 数据类型 + 变量名 + 变量值
如:const int age = 10;
说明:const是用来限定一个变量不允许被改变的修饰符,被const关键字所修饰的变量,也为不能被改变的值。
注意:在创建常量时候必须要设置它的初始值,举个例子:
const dobule PI = 3.14159; //正确的声明方式
const int age; //错误的声明方式

#include <stdio.h>
//const 修饰定义的常变量就不可改变值
int main()
{
	int a = 10;
	printf("a = %d\n",a);
	a = 50;
	printf("a = %d\n", a);
	
	const int b = 10;//b 就是被const修饰的常变量
	//表达式必须是可修改的左值
	//但本质上b还是一个变量,只是相当于加了限制条件/属性
	//const int 在C++里等价于常量
	printf("b = %d\n", b);
	b = 100;//报错,因为被const修饰的变量就不可改变了,故b = 10
	printf("b = %d\n", b);
	return 0;
}

如图所示
在这里插入图片描述

2.2、const修饰函数的参数例程2

回顾上一篇介绍assert关键字中的例程
说明;
const 修饰函数传参的参数时,使得避免参数的返回值错误,使得代码更加的优化完善,减少Bug的出现。

#include <stdio.h>
#include <assert.h>
#include <string.h>

//size_t --- unsigned int
size_t My_strlen(const char* str)//参数传数组首地址
{
	assert(str != NULL);//断言,判断是否传的空地址,及时报错纠正
	int count = 0;//计数
	//是假就不执行while循环
	//是真则执行,函数体
	//不断判断后加加(后置++,先用后加),数组元素是否为字符串结束标志位'\0'
	while (*str != '\0')
	{
		str++;
		count++;
	}
	return count;
}
int main()
{
	char arr[] = "hello bit!!!";
	int len = My_strlen(arr);
	printf("%d\n", len);//12
	return 0;
}

3、const与指针变量的搭配

注意
const — 修饰变量,这个变量就被称为常变量,使得变量不能被修改了,但本质上仍然是变量

const 修饰指针变量时

a、const 如果放在解引用操作符✳的左边修饰的是✳p,表示指针指向的内容,使得不能再通过指针改变指针的对象
b、const 如果放在✳的右边修饰的是指针变量p,使得指针变量不能改变了,同理,指针的对象可修改了

注意的是
const 修饰的是指针指向的对象,所以当指向一个新的变量,指针又可正常使用了。
即:指针变量本身是不被const约束的

3.1、指针与const的应用例程

注意:代码为了高亮显示,部分地方已去掉了单行注释符//

#include <stdio.h>
int main()
{
	int a = 10;
	int* pa = &a;
	*pa = 20;
	printf("%d\n",a);

	const int a = 10;
	a = 15;//报错---被const修饰了
	printf("%d\n", a);//10
	int* pa = &a;
	*pa = 20;
	printf("%d\n", a);//20----当通过指针可以改变a,但有违背const语法

	const int a = 10;
	//a = 15;//报错---被const修饰了
	printf("%d\n", a);

	//const 修饰指针变量时
	const int* pa = &a;
	//1.const 如果放在*的左边,修饰的是*p,表示指针指向的内容,使得不能再通过指针改变了
	int* const pa = &a;
	//2.const 如果放在*的右边,修饰的是指针变量p,使得指针变量不能改变了,同理,指针的对象可修改了
	*pa = 20;
	printf("%d\n", a);//报错--- 表达式必须是可修改的左值

	//注意的是const 修饰的是指针指向的对象
	//所以当指向一个新的变量,指针又可正常使用了
	//即指针变量本身是不被const约束的
	
	int n = 15;
	pa = &n;//把新变量地址给pa
	printf("%d\n",n);//15---正常输出
	return 0;
}

如图所示
在这里插入图片描述

3.2、指针与const的应用延申二级指针

二级指针const应用— 与一级指针同理:int const * const * const pa; 不常用就不过多赘述了
三级指针等也同理const的位置约束就不同

4、结束语

相信大家阅读后对const关键字又了新的发现,熟悉后在需要的地方正确的使用,const对程序也会起到关键的作用。提升代码的规范性,变量的功能性等。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值