首页 > 其他分享 >C语言学习--常量

C语言学习--常量

时间:2024-08-15 22:25:19浏览次数:5  
标签:const 定义 常量 -- 4.2 C语言 PI define

提示:在程序设计中,常量是一个至关重要的概念。

目录

前言

4.1 基本介绍

4.2 经常使用的常量

4.2.1整数常量

4.2.2浮点常量

4.2.3字符常量

4.2.4字符串常量

4.2.5案例演示

4.3 常量的定义

4.3.1定义常量的两种方式

4.4 #define 预处理器

4.5 const 关键字

4.6 const 和 #define 的区别

总结

附录


前言

在程序设计中,常量是一个至关重要的概念。它们代表固定不变的值,能够提高代码的可读性、可维护性和安全性。常量的使用不仅可以避免魔法数字(magic numbers)的出现,还可以确保程序在执行过程中不会意外修改某些关键值。本节将深入探讨常量的类型及其定义方式,包括整数常量、浮点常量、字符常量和字符串常量,以及如何通过 #define 预处理器和 const 关键字来定义常量。掌握这些基本概念将为后续的编程学习和实践打下坚实的基础。


4.1 基本介绍

1) 常量是固定值,在程序执行期间不能改变。这些固定的值,又叫做字面量。

2) 常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。

3) 常量的值在定义后不能进行修改。

4.2 经常使用的常量

4.2.1整数常量

1) 整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意

2) 整数常量举例说明

85 /* 十进制 */

0213 /* 八进制 */

0x4b /* 十六进制 */ 八进制和十六进制后面解释

30 /* 整数 */

30u /* 无符号整数 */

30l /* 长整数 */

30ul /* 无符号长整数 */

4.2.2浮点常量

1) 浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。

2) 浮点常量举例说明

3.14159; //double 常量

314159E-5; // 科学计数法

3.1f; //float 常量

4.2.3字符常量

1) 字符常量是括在单引号中,例如,'x' 可以存储在 char 类型的变量中。字符常量可以是一个普通的字符(例如'x')、一个转义序列(例如 '\t')。

2) 字符常量举例说明

'X'

'Y'

'A'

'b'

'1'

'\t'

4.2.4字符串常量

1) 字符串字面值或常量是括在双引号 "" 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。可以使用空格做分隔符,把一个很长的字符串常量进行分行

2) 字符串常量举例说明

"hello, world"

"北京"

"hello \

world"

4.2.5案例演示

#include <stdio.h>

void main() {

int n1 = 0213; /* 八进制 */ //对应 10 进制 139

int n2 = 0X4b; /* 十六进制 */ // 对应 10 进制 75

char c1 = 'a';

char c2 = '\t'; // '\t' 是字符常量

char str1[20] = "北京 hello"; // "北京 hello" 字符串常量

char str2[100] = "hello \

world"; // 等价 "hello world"

//验证

printf("\nn1=%d n2=%d", n1, n2);

printf("\nstr1=%s str2=%s", str1, str2);

getchar();

}

4.3 常量的定义

4.3.1定义常量的两种方式

1) 使用 #define 预处理器。

2) 使用 const 关键字

4.4 #define 预处理器

1) #define 预处理器定义常量的形式

#define 常量名 常量值

2) 案例演示

#include <stdio.h>

#define PI 3.14 //定义常量 PI 常量值 3.14

int main() {

//PI = 3.1415 可以吗?=》 不可以修改,因为 PI 是常量

//可以修改 PI 值?

//PI = 3.1415; //提示 = 左值 必须是可修改的值

double area;

double r = 1.2;//半径

area = PI * r * r;

printf("面积 : %.2f", area);

getchar();

return 0;

}

4.5 const 关键字

1) 可以使用 const 声明指定类型的常量

const 数据类型 常量名 = 常量值; //即就是一个语句

2) 案例演示

#include <stdio.h>

//说明

//1. const 是一个关键字,规定好,表示后面定义了一个常量

//2. PI 是常量名,即是一个常量,常量值就是 3.14

//3. PI 因为是常量,因此不可以修改

//4. const 定义常量时,需要加 分号

const double PI = 3.14;

int main() {

//PI = 3.1415 可以吗? => 不可以

double area;

double r = 1.2;

area = PI * r * r;

printf("面积 : %.2f", area);

getchar();

return 0;

}

4.6 const 和 #define 的区别

1) const 定义的常量时,带类型,define 不带类型

2) const 是在 编译、运行的时候起作用,而 define 是在编译的预处理阶段起作用

3) define 只是简单的替换,没有类型检查。简单的字符串替换会导致边界效应[案例演示].

4) const 常量可以进行调试的,define 是不能进行调试的,主要是预编译阶段就已经替换掉了,调试的时候就没它了

5) const 不能重定义,不可以定义两个一样的,而 define 通过 undef 取消某个符号的定义,再重新定义 [案例]

6) define 可以配合#ifdef、 #ifndef、 #endif 来使用, 可以让代码更加灵活,比如我们可以通过#define 来 启动或者关闭 调试信息。[案例]

7) 注意事项的举例说明

#include <stdio.h>

#define A 1

#define B (A+3) //

#define C A/B*3 //

//const 不能重定义,不可以定义两个一样的,而 define 通过 undef 取消某个符号的定义,再重新定义

const double PI=3.14;

//const double PI=3.145;

#define PI2 3.14

#undef PI2 // 取消 PI2 的定义

#define PI2 3.145

void main() {

//

//分析过程

//#define 就是一个简单的替换!!!

//C 其实是 A/A+3*3 = 1/1 + 3 * 3 = 1 + 9 = 10

//C 其实是 A/(A+3)*3 = 1/(1+3) * 3 = 1/4 *3 = ?

double d1 = 1.0/4 *3 ; // 0.25 * 3 = 0.75

printf("\nc=%.2f", C);// 问 c = ?

printf("\nd1=%.2f", d1);

getchar();

}
//第二个案例, 说明 const 和 define 区别

#include <stdio.h>

//#define DEBUG

void main() {

#ifdef DEBUG //如果定义过 DEBUF

printf("ok, 调试信息");

#endif

#ifndef DEBUG //如果没有定义过 DEBUF

printf("hello, 另外的信息");

#endif

getchar();

}

总结

本节内容详细介绍了常量的基本概念及其分类,包括整数常量、浮点常量、字符常量和字符串常量。通过示例代码,我们展示了常量的实际应用,并说明了如何使用 #define 预处理器和 const 关键字来定义常量。我们还比较了这两种定义方式的优缺点,包括类型检查、作用域以及重定义的限制。在实际编程中,合理使用常量可以使代码更加清晰、易于维护,同时减少潜在的错误。因此,掌握常量的使用,不论是在简单的程序还是复杂的系统中,都是至关重要的。

附录

参考:【尚硅谷C语言零基础快速入门教程-哔哩哔哩】 https://b23.tv/vS3vTDp

标签:const,定义,常量,--,4.2,C语言,PI,define
From: https://blog.csdn.net/weixin_62881069/article/details/141231235

相关文章

  • C语言学习-- 运算符
    提示:在C语言编程中,算术、关系和逻辑运算符是基础且不可或缺的工具。目录前言5.1算术运算符5.1.1介绍5.1.2算术运算符一览5.1.3案例演示5.1.4细节说明5.1.5自增,自减课堂练习15.1.6课堂练习25.2关系运算符(比较运算符)5.2.1介绍5.2.2关系运算符一览5.2.3案例......
  • libarchive库笔记:tar.gz格式压缩文件编程
    libarchive,一个支持多种格式的压缩和归档的C语言库,包含常见的tar、cpio和zcat命令行工具的实现。本文展示一个libarchive库C语言编程的tar.gz格式压缩文件示例。简单代码示例:#include<stdlib.h>#include<stdio.h>#include<string.h>#include<fcntl.h>#include"arch......
  • Python编程 - 判断语句与循环语句
    目录前言一、运算符二、判断语句三、循环语句总结前言第一篇主要讲的是较为基础的知识,如变量,关键字和输入输出等,接下来主要讲判断语句,将判断语句之前需要先扩展上篇文章中的运算符,运算符搭配判断语句使用,让我们拭目以待!!一、运算符这里拓展的运算符有比较运......
  • Swift编译器的代码验证机制:安全与效率的双重协奏
    标题:Swift编译器的代码验证机制:安全与效率的双重协奏引言Swift语言以其安全性和高性能著称,这在很大程度上归功于其编译器的精妙设计。Swift编译器的代码验证机制是确保代码既安全又高效的关键环节。本文将详细探讨Swift编译器的代码验证机制,并展示如何在实践中利用这些机......
  • 解锁文本奥秘:NSLinguisticTagger在Objective-C中的语言分析之旅
    标题:解锁文本奥秘:NSLinguisticTagger在Objective-C中的语言分析之旅引言在Objective-C的丰富生态中,NSLinguisticTagger扮演着自然语言处理的重要角色。它提供了一套强大的API,用于对文本进行分词和标注,帮助开发者理解文本的结构和含义。本文将深入探讨NSLinguisticTagger的......
  • 传世:发布网www.SouFu6.cn,新开传世来袭!79
           传世:发布网www.SouFu6.cn,新开传世来袭!141       私服有着许多独特的品质,使其与正版游戏区别开来。首先,私服通常会提供大量的游戏元素和功能,比如新增的职业、装备、地图等,让玩家能够体验到更丰富的游戏内容。其次,私服还通常会调整游戏的一些......
  • 传世:发布网www.SouFu6.cn,新开传世来袭!8
           传世:发布网www.SouFu6.cn,新开传世来袭!34       私服有着许多独特的品质,使其与正版游戏区别开来。首先,私服通常会提供大量的游戏元素和功能,比如新增的职业、装备、地图等,让玩家能够体验到更丰富的游戏内容。其次,私服还通常会调整游戏的一些......
  • 五、1 算数操作符&位操作符
    1、算数操作符(1)“/”得到一个整数商,不包含余数进行浮点数除法,操作符两端至少有一个浮点数(2)“%”取模,得到余数两端必须为整数2、位操作符(只适用于整型)(1)“&”按位与,有0为0,全为1则为1;(2)“|”按位或,有1为1,全为0则为0;(3)“^”按位异或,相同为0,相异为1.在十进制中异或,a......
  • java中运算符的详细知识点
    算数运算符a++先赋值再加1++a先加1在赋值--的道理是一样的赋值运算符1.=+=-=*=/=%=当=两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则支持连续赋值=+=-=*=/=%=不会改变基础类型测试一下:比较运算符运算结果为布尔类型==!=适......
  • 为博客添加Live图
    为博客添加Live图Apple提供了很生动的Live实况图,在实际展示的过程中非常生动形象,在撰写博客的过程中,我自己也尝试将博客中嵌入实况图片其实Apple提供的iCloud网页版为我们提供了很好的示例,为了实现本文开始的效果,我们也将使用Apple官方所提供的方法资源准备在了解如何实现Live......