首页 > 其他分享 >【C语言_20】const与#define的用法及区别

【C语言_20】const与#define的用法及区别

时间:2022-10-10 17:00:09浏览次数:63  
标签:20 定义 int C语言 const 指针 变量 define

1.const关键词的用法

const 在实际编程中用得并不多,const 是 constant 的缩写,意思是“恒定不变的”!它是定义只读(不能修改)变量的关键字,或者说 const 是定义常变量的关键字。用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值。

const int n=10;

const 和变量类型 int 可以互换位置,二者是等价的:

int const n=10;

2.const和指针

const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据。const 和指针一起使用会有几种不同的顺序,如下所示:

const int *p1;
int const *p2;
int * const p3;

在前面两种情况下,指针所指向的数据是只读的,也就是 p1、p2 本身的值可以修改(指向不同的数据),但它们指向的数据不能被修改。

在最后一种情况下,指针是只读的,也就是 p3 本身的值不能被修改;

3.#define关键词的用法

#define 关键字有两个作用,一个是定义标识符,第二个是定义宏。

#define 叫做宏定义命令,它也是C语言预处理命令的一种。所谓宏定义,就是用一个标识符来表示一个字符串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。

宏定义的一般形式为:

#define  宏名  字符串
//字符串可以是数字、表达式、if 语句、函数等。

  •  宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单粗暴的替换。预处理程序对它不作任何检查,如有错误,只能在编译已被宏展开后的源程序时发现。
  • 宏定义不是说明或语句,在行末不必加分号。
  •  宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用​​#undef​
#include<stdio.h>
#define price 3
int main()
{
int n,sum;
printf("请输入商品数量:\n");
scanf("%d",&n);
sum=n*price;
printf("总价为:%d",sum);
return 0;
}

【C语言_20】const与#define的用法及区别_const关键词

4.conat与#define的区别

1.#define是预编译指令,而const是普通变量的定义。define定义的宏是在预处理阶段展开的,而const定义的只读变量是在编译运行阶段使用的。

2.const定义的是变量,而#define定义的是常量。#define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。但const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元。

3.const定义的是变量,而宏定义的是常量,所以const定义的对象有数据类型,而宏定义的对象没有数据类型。所以编译器可以对前者进行类型安全检查,而对后者只是机械地进行字符替换,没有类型安全检查。这样就很容易出问题,即“边际问题”或者说是“括号问题”。

4.const不能重定义,而#define可以通过#undef取消某个符号的定义,再重新定义。


持续更新【C语言】系列!有需要的可以移步主页​​秃头程序媛主页​

标签:20,定义,int,C语言,const,指针,变量,define
From: https://blog.51cto.com/u_15420562/5744800

相关文章

  • 使用 idea2021(汉化版)创建一个java程序
            建好以后是这样的 在左边的项目栏建好的项目下右键【src】,选择【新建】,选择【Java类】  输入文件名HelloWorld按回车。即可创建完成......
  • P5643 [PKUWC2018]随机游走
    求出所有\(E_{\min}(S)\),然后FWT求\(E_{\max}(S)\)枚举集合\(S\),记\(f_{u}\)表示从终点\(u\)走到\(S\)中节点的期望步数。对于不属于\(S\)的点\(u\),有:......
  • 报告分享|2022年中国金融云行业研究报告
    报告对我国金融云行业的发展背景、竞争格局、市场规模等情况进行深入梳理。从存量市场与增量市场两大维度洞察中国金融云行业未来的发展方向与实践效能,并对卓越服务商及卓......
  • 报告分享|2022年聚焦游戏领域报告
    报告链接:http://tecdat.cn/?p=29091移动游戏将在 2022 年突破 1,360 亿美元,比游戏市场整体增长快 1.7 倍2022 年,移动游戏在全球用户年度支出中的市场份额将超过 ......
  • 报告分享|2022年618消费趋势洞察报告
    报告链接:http://tecdat.cn/?p=29095报告显示,近30天“618”相关内容搜索环比上涨418%,其中上海网友最积极;并且打标“老字号”的商品成交额同比增长94%,其中95后年轻人群成交......
  • 报告分享|2022年中国生物基可降解材料技术与行业研究报告
    报告链接:http://tecdat.cn/?p=29087目前,生物基可降解材料市场上最典型的产品为PLA(polylacticacid/聚乳酸)、PHA(polyhydroxyalkanoates/聚羟基脂肪酸酯)。两类产品技术水......
  • 20. JS作用域(全局作用域+局部作用域)
    1.前言在JavaScript中,您可以在任意位置声明变量,但不同的位置会影响变量的可用范围,这个范围称为作用域。作用域可以大致分为两种类型,分别是全局作用域和局部作用域。下......
  • 2022.10.10 POI
    POI与easyExcel应用场景将用户信息导出为excel表格将Excel表中的信息录入到网站数据库,大大减小网站数据的录入量!开发中经常会涉及到excel的处理,如导出Excel到......
  • TMS320LF2407数字采样
    1引言模数(AD)转换通常是数字信号处理应用中的第一步,依据应用的不同,对模数转换器(ADC)也有不同的要求,衡量模数转换器的最重要的标准是它的转换速率、分辨率和精度。应......
  • 习题11-5 指定位置输出字符串 (20分)
    本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。函数接口定义:char*match(......