C语言const用法详解

❤️C语言const用法详解

近期在刷题时,总是会遇到const关键字,尤其是const与指针在一起的时候,对于我这样的小白来说,总是迷迷糊糊的,需要对着笔记才能写出答案。于是想着对const的用法进行自我归纳。希望也能让你从此不再迷惑!

参考文章-------------C语言中文网

💖 const修饰变量

问大家一个问题,const修饰变量一定不能被修改吗?(PS:看到过腾讯一面问过,可惜我找不到图片了😭 )

在这里插入图片描述

看到这里,很多人会想,const修饰后的变量都为常变量了,怎么可以修改?

其实不然,我们可以通过指针的方式进行修改。

int main()
{
    const int a = 10;
    int* p = &a;
    *p = 20;
    printf("%d\n",a);
    return 0;
}

在这里插入图片描述

说明const修饰的变量是可以通过指针来进行修改的,但是需要知道的是,这种方法在VS中会警告!不建议使用!

这里我们只需要知道被const修饰的变量也是可以被修改的即可😄

💜 const和指针

const也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据。有以下的几种情况!

🌸 1、const放在 * 的左边

const放在 * 的左边,则指针变量所指向的数据不能通过指针变量改变。

在这里插入图片描述

但指针变量是可以改变的

int main()
{
	int a = 10;
	int b = 20;
	const int* p = &a; //等价于  int const* p = &a;
	p = &b;  //指针变量是可以改变
	printf("%d\n", *p);
	return 0;
}

在这里插入图片描述

🌷 2、const放在 * 的右边

const放在 * 的右边,则指针变量不能改变

> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iALI1sKw-1658676084479)(C:\Users\25584\AppData\Roaming\Typora\typora-user-images\image-20220724205723745.png)]

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

int main()
{
	int a = 10;
	int* const p = &a;
	*p = 20;
	printf("%d\n", a);
	return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-40xGkr6d-1658676084479)(C:\Users\25584\AppData\Roaming\Typora\typora-user-images\image-20220724210332415.png)]

🌺 3、const放在 * 的 左右 边

const放在 * 的左右边,则指针变量不可被修改,且指针变量所指向的对象也不被修改,双重锁定。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rxUyvnCX-1658676084480)(C:\Users\25584\AppData\Roaming\Typora\typora-user-images\image-20220724223925507.png)]

💙 const和函数形参

在C语言中,单独定义const变量没有明显的优势,完全可以使用 #define命令代替。const通常用在函数形参,如果形参一个指针,为了防止在函数内部修改指向的数据,就可以用const来限制

在C语言提供的标准库函数中,就存在很多函数的形参被const所修饰,下面是部分函数的原型:

size_t strlen (const char* str);
int strcmp(const char* str1,const char* str2);
char* strcat(char* destination,const char* source);
char* strcpy(char* destination, const char* source);
int printf ( const char * format, ... );

编程好习惯: 所以函数形参为指针时,若不希望指针所指向的内容被改变,则应及时在 * 的左边加上const 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kunmu.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值