C语言——const关键字

一、const是什么

       const是C语言中的一个关键字,是定义只读变量的关键字。但是一个变量经过const的修饰后,不仅拥有常量的属性,又有变量的属性,所以又说const是定义常变量的关键字。

二、const的用法

const修饰时比较灵活,可能因为位置的不同起到不同的效果。

1、用来修饰变量(指针变量除外)

        在修饰变量(指针变量除外)的时候,const type name 和 type const name 这两种形式是完全一样的表示 name 是常变量。 此时无法直接修改 num,但是可以通过指针变量的形式来修改。

         无法直接通过修改 num来改变。

#include<stdio.h>
int main()
{
	const int num = 10; //const修饰之后,num是常变量

	//num 具有常量的性质
	num = 20;	//报错,因为num具有常量的性质,因此无法重新进行赋值。
    printf("num=%d", num);  

	return 0;
}

此时编译器会显示错误,提示表达式必须是可修改的值。错误如下:

         通过指针变量来进行修改num的值。

#include<stdio.h>
int main()
{
	const int num = 10; //const修饰之后,num是常变量

	//num具有变量的性质-通过指针的形式修改 num 的值
	int* p = &num;
	*p = 20;
	printf("num=%d\n", num);

	return 0;
}

此时输出结果如下:

 2、用来修饰指针变量

         const用来修饰指针变量时分为两种情况:一种是const位于' * '的左边,另一种是const位于' * '的右边。

        (1)当const位于' * '的左边,即 const type* name 和 type const *name 这两者是完全一样,无任何区别。这种情况下 const 修饰的是 name 指向的对象无法修改,但可以修改指针变量。

#include<stdio.h>
int main()
{
	int num = 10;//创建一个 num 的临时变量
	int n = 20;
	const int* p = &num;//将 num 这个临时变量的地址传给 p

	//无法修改指针变量所指向的对象
	//*p = 20;
	//printf("%d\n", *p);//报错

	//可以修改指针变量
	p = &n;//修改了指针变量,即 p 存放的是 n 的地址
	printf("num=%d  n=%d  *p=%d\n",num,n, *p);

	return 0;
}

指针变量指向的对象无法修改

可以修改指针变量        

         (2)当const位于' * '的右边,即 type* const name 。这种情况下无法修改指针变量, 但可以修改指针变量指向的对象。

#include<stdio.h>
int main()
{
	int num = 10;//创建一个 num 的临时变量
	int n = 20;
	int* const p = &num;//将 num 这个临时变量的地址传给 p;

	//无法修改指针变量
	//p = &n;
	//printf("%d\n", *p);//报错

	//可以修改指针变量所指向的对象
	*p = 200;//通过修改指针变量所指向的对象,改变了 num 的值
	printf("num=%d  n=%d  *p=%d\n", num,n,*p);

	return 0;
}

无法修改指针变量

 可以修改指针变量指向的对象

         (3)综上两种情况,若想无法修改指针变量也无法修改指针变量指向的对象,那么应该写成:const type* const name 。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值