C语言中的const只是一个冒牌货(const的作用,论述const在C语言中为何冒牌)
发布日期:2021-09-20 08:56:12 浏览次数:21 分类:技术文章

本文共 1266 字,大约阅读时间需要 4 分钟。

const的作用,论述const在C语言中为何冒牌

一.const的作用

1.const修饰的变量为只读,即变量不可以被修改,相当于一个常量,例如:

#include 
int main(){ const int b = 10;//const修饰的变量不可以被修改 b = 100;//err return 0;}

2.const修饰指针时,两种不同的用法分为 指针变量和指针指向的内存,两个不同的概念,例如:

#include 
int main(){ char buf[] = "akjefbefbijewf"; //从左往右看,跳过类型,看const修饰哪个字符 //如果修饰的时*,说明指针指向的内存不能发生改变,即指针所指向的内存只能读,不可以写 //如果修饰的是指针变量p;说明指针的指向不能发生改变,即指针的值不可以修改 const char *p = buf;//const修饰*,所以指针所指向的能容不能改变即如果//p[1]='1';//err char const *p2 = buf; const char * const p3 = buf;//两个const修饰即修饰*又修饰指针变量, //所以,p3只能读,指向的内存也不能 改变 return 0;}

3.const修饰指针在结构体中的综合使用,代码如下:

#include 
#include
#include
typedef struct SKT{ int a; int b;}SKT;void fun(SKT *p){ //没有const修饰,指针可以变,指针所指向的内存也可以改变; //p->a = 10;//ok; //p = NULL;//ok}void fun1(SKT const *p){ //p = NULL;//ok //p->=10;//err}void fun2(SKT *const p){ //p = NULL;//err //p->a = 10;//ok}void fun3(SKT const *const p){ //const修饰两个都修饰,只能读取}int main(){ system("pause"); return 0;}

二.C语言中的const是一个冒牌货

为什么这么说呢,因为在C语言中,const修饰的变量,可以通过指针进行间接赋值,例如:

#include 
int main(){ const int a = 10; //a = 20;//err const修饰这样的赋值会直接报错 int *p = &a; *p = 20; printf("a=%d,*p=%d\n", a, *p); return 0;}

通过指针的间接赋值,const已经发挥不到他的作用。

转载地址:https://blog.csdn.net/a_hang_szz/article/details/88530487 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C语言中结构体的深拷贝和浅拷贝
下一篇:C语言中的冒泡排序法简述

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年03月15日 02时38分13秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql 翻页 存储过程_MySQl通用翻页(存储过程) 2019-04-21
mysql 自带压测工具_centos7中mysql自带压测工具mysqlslap使用 2019-04-21
python中pca算法_使用python的numpy库实现PCA算法 2019-04-21
2020word替换所有文本_Excel字符函数(5):REPLACE、SUBSTITUTE查找替换函数之区别... 2019-04-21
win10安装ipython_win10环境 ipython app.py 8080 这里为什么是ipython 这步无法启动 2019-04-21
statelesswidget 初始化执行方法_Spring的初始化回调你真的搞懂了吗? 2019-04-21
nhibernate和mysql_利用NHibernate与MySQL交互 2019-04-21
python22期_python22期第八天(正则表达式-模块,总结) 2019-04-21
假定在MYSQL_假定在名称为教学库的数据库中包含有学生、课程和选课三个表,它们的定义如下 - 问答库... 2019-04-21
mysql多字段存储过程_mysql 的存储过程_多字段 2019-04-21
python怎么创建字符串列表_如何在python列表中为每个字符串创建子列表? 2019-04-21
vba ado 执行多条mysql 语句_access 按钮 多条sql语句 VBA 2019-04-21
弹性方法计算连续梁板内力_(梁板结构)混凝土结构设计复习题及答案 2019-04-21
java root权限_android java获得root权限调用linux命令 | 学步园 2019-04-21
java最小化窗体_JAVA窗体最大化最小化控制+托盘 2019-04-21
java 注解 数组默认值_Java注解默认值 2019-04-21
java流程语句_Java流程控制语句 2019-04-21
java require_java正则中的requireEnd和hitEnd 2019-04-21
400错误java_java代码转化成c#代码 报400错误 2019-04-21
java常见对象_Java 常见对象 02 2019-04-21