C语言禁止使用const,c语言中关于const的使用
const是C语言中一个十分重要的修饰 我总结了它的含义使用以及作用如下
1.修饰的数据类型是常类型,常类型的变量或对象的值不能被改变
const int i=10;
int a[i];等价于int a[10];
2.便于进行类型检查,使编译对处理内容有更多的了解,消除了一些隐患。
3.方便的进行参数的调整和修改(类似于宏定义)
4.可以保护被修饰的东西,防止被意外修改,增强程序的健壮性。
5.可以节省空间,避免不必要的内存分配(与宏定义的本质区别)
#define的作用是给出立即数,每次调用时需要进行内存分配,会有若干份拷贝
const定义常量从汇编角度来看,只是得出了对应的内存地址,所以,const定义的常量在程序运行过程中只有一份拷贝。
6.提高了效率。
编译器通常不为普通const常量分配储存空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了储存和读内存的操作,使得它效率也很高。
//数组名是一个const指针(int a[]等价于int *const a)
所以说不能a[]=b[]
7.const与指针
int * const p=&i; //p是const常量,不能再修改
*q=26;//OK
q++;//ERROR
const int* p=&i;//不能通过这个指针修改那个变量
*p=26;//ERROR (*p)是const常量
i=26;//OK
p=&j;//OK
int const* p=&i;(等价于const int* p=&i;)
注意:只有两种含义地址p不能修改或不能通过地址p修改
判断方法,第一种const在*后,第二种const在*前
8.转换
可以把一个非const得值转换为const的
void f(const int* x);
int a=15;
f(&a);//OK
当要传递的参数类型比地址大的时候,这是常用的手段:既能用比较少的字节数传递给参数,又能避免函数对外面的变量的修改。
这是传递结构体的常用方法
9.保护数组值
函数内部可以修改数组的值,为了保护数组不被函数破坏,可以设置参数为const
int(const int a[],int len);
C语言禁止使用const,c语言中关于const的使用相关推荐
- c语言常量的正确表示const,C语言中的const和free用法详解
注意:C语言中的const和C++中的const是有区别的,而且在使用VS编译测试的时候.如果是C的话,请一定要建立一个后缀为C的文件,不要是CPP的文件.因为,两个编译器会有差别的. 一.C语言中的 ...
- const char *p;和char * const p的区别
const char *p; const修饰*p,所以*p是一个常量,不可修改. char* const p; const修饰p,所以指针p是一个常量,不可修改. #include< ...
- C语言返回值是const类型,C++中const用法总结
1.1.1. 定义普通常量 使用#define来定义常量也是常用方法,但const也可以用来定义常量,在[Effective C++]中建议使用const代替#define来定义常量,因为const定 ...
- 2020-09-21C++学习笔记之与C语言区别和加强——四种const意义(const int a; int const b; const int *c; int * const d)
2020-09-21C++学习笔记(const int a; int const b; const int *c; int * const d) 这两天在上课更新晚了. 1.C/C++中的const ...
- 【C 语言】const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )
文章目录 一.const 普通用法 二.常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 ) 三.指针常量 ( 指针不能被修改 ) 三.指向 常量 的 指针常量 四.const 在 * 左 ...
- c语言分隔符分离出str字符串中的数字,C语言版Tokenize()函数,由分隔符获取字符串...
测试环境: 操作系统: Windows10 64位 运行环境: Visual Studio 10 函数: /********************************************** ...
- c语言复制粘贴源码,c语言函数memccpy()如何复制内存中的内容实例源码介绍
c语言函数memccpy()如何复制内存中的内容实例源码介绍.引入的头文件:#include memccpy()函数定义:void * memccpy(void *dest, const void * ...
- 非递减数列JAVA_C语言实现两个递减数列中寻找某一个数
本文实例讲述了C语言实现两个递减数列中寻找某一个数的方法,分享给大家供大家参考之用.具体方法如下: 通常来说这道题算二分查找法中非常有难度的一题了. 题目如下: 一个数组是由一个递减数列左移若干位形成 ...
- char* 赋值 const char* 释放_嵌入式Linux开发《C语言专题(十:彻底搞懂“关键字”const)》...
C语言中的关键字总共有32个:auto break case char const continue default do double else enum extern float for goto ...
最新文章
- Udacity机器人软件工程师课程笔记(三十二) - 卡尔曼滤波器 - 一维卡尔曼滤波器 - 多维卡尔曼滤波器 - 拓展卡尔曼滤波器(EKF)
- 国内外NLP领域学术界和工业界的牛人和团队
- Linux下ps -ef和ps aux的区别
- boost::fusion::result_of::as_vector用法的测试程序
- Spring Boot文档阅读比较-@SpringBootApplication Auto Configuration
- python call agilent com_python 控制Asterisk AMI接口外呼电话的例子
- sqlserver安装目录_SQL 2008R2安装教程
- PyTorch读取目标检测数据集
- ubuntu16.04系统下配置caffe的GPU环境,训练mobileNet-SSD并在EAIDK-310嵌入式上推理
- Spring源码解析之AOP篇(一)----代理模式详解
- 4007: [JLOI2015]战争调度
- matlab解方java_如何在MATLAB中获得该方程的所有解?
- 微信Tinker 热修复介绍及接入(一)
- Python(28)---模块和包的基本概念
- 应用网易轻舟,德邦快递核心系统入选云原生应用十大优秀案例
- 13商软 团队博客 列表
- 05.抽象队列同步器AQS应用之Lock详解
- Oracle MySQL Hive sql进行相邻数据相减、相加等运算 lad lead 窗口函数 偏移函数
- Primary Arithmetic
- caffe Segnet 语义分割(一)