当前位置: 首页 > news >正文

C语言常量和存储类别详解

常量与字面量

基本概念

常量是指在程序执行过程中不会更改的固定值,也称为字面量。常量可以是任何基本数据类型,包括整数常量、浮点常量、字符常量或字符串文字,以及枚举常量。

整数字面量

表示方式:

  • 十进制:无前缀

  • 八进制:以0为前缀

  • 十六进制:以0x或0X为前缀

后缀说明:

  • U:无符号整数

  • L:长整数

  • 可大写或小写,顺序任意

合法示例:

c

212        /* 十进制 */
215u       /* 无符号十进制 */
0xFeeL     /* 十六进制长整数 */

非法示例:

c

078        /* 非法:8不是八进制数字 */
032UU      /* 非法:不能重复后缀 */

更多示例:

c

85         /* 十进制 */
0213       /* 八进制 */
0x4b       /* 十六进制 */
30         /* int */
30u        /* unsigned int */
30l        /* long */
30ul       /* unsigned long */

浮点字面量

组成结构:

  • 整数部分

  • 小数点

  • 小数部分

  • 指数部分(用e或E引入)

合法示例:

c

3.14159       /* 合法 */
314159E-5L    /* 合法 */

非法示例:

c

510E          /* 非法:指数不完整 */
210f          /* 非法:无小数或指数 */
.e55          /* 非法:缺少整数或小数部分 */

字符字面量

表示方式: 用单引号括起来

类型:

  • 普通字符:'x'

  • 转义序列:'\t'

  • 通用字符:'\u02C0'

常用转义序列:

转义序列含义
\\\字符
\''字符
\""字符
\??字符
\a警报或铃声
\b退格键
\f换页
\n新行
\r回车
\t水平制表
\v垂直制表
\ooo八进制数
\xhh...十六进制数

示例程序:

c

#include <stdio.h>int main() {printf("Hello\tWorld\n\n");return 0;
}

输出结果:

text

Hello   World

字符串字面量

表示方式: 用双引号括起来

多行表示:

c

"hello, dear""hello, \
dear""hello, " "d" "ear"

以上三种形式表示相同的字符串。

定义常量的方法

1. 使用#define预处理指令

c

#define identifier value

示例:

c

#include <stdio.h>#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '\n'int main() {int area;  area = LENGTH * WIDTH;printf("value of area : %d", area);printf("%c", NEWLINE);return 0;
}

输出结果:

text

value of area : 50
2. 使用const关键字

c

const type variable = value;

示例:

c

#include <stdio.h>int main() {const int LENGTH = 10;const int WIDTH = 5;const char NEWLINE = '\n';int area;  area = LENGTH * WIDTH;printf("value of area : %d", area);printf("%c", NEWLINE);return 0;
}

输出结果:

text

value of area : 50

存储类别

存储类定义了变量和函数的作用域(可见性)和生存期,包括四种类型:

  • auto

  • register

  • static

  • extern

auto存储类别

所有局部变量的默认存储类。

c

{int mount;          // 默认为autoauto int month;     // 显式声明为auto
}

register存储类别

用于定义应存储在寄存器中的局部变量。

c

{register int miles;  // 建议编译器存储在寄存器中
}

特点:

  • 变量大小等于寄存器大小

  • 不能应用&运算符

  • 适用于需要快速访问的变量(如计数器)

static存储类别

局部静态变量: 在函数调用之间保持值不变
全局静态变量: 作用域限制在声明它的文件中

示例程序:

c

#include <stdio.h>/* 函数声明 */
void func(void);static int count = 5; /* 全局静态变量 */int main() {while(count--) {func();}return 0;
}/* 函数定义 */
void func(void) {static int i = 5; /* 局部静态变量 */i++;printf("i is %d and count is %d\n", i, count);
}

输出结果:

text

i is 6 and count is 4
i is 7 and count is 3
i is 8 and count is 2
i is 9 and count is 1
i is 10 and count is 0

extern存储类别

用于在多个文件间共享全局变量和函数。

文件1:main.c

c

#include <stdio.h>int count;
extern void write_extern();int main() {count = 5;write_extern();return 0;
}

文件2:support.c

c

#include <stdio.h>extern int count;void write_extern(void) {printf("count is %d\n", count);
}

编译和执行:

bash

gcc main.c support.c
./a.out

输出结果:

text

count is 5

最佳实践建议

  1. 常量定义:建议在源码头部定义常量,提高代码可读性和可维护性

  2. 存储类别选择

    • 局部变量使用auto(默认)

    • 频繁使用的计数器考虑register

    • 需要保持值的局部变量使用static

    • 多文件共享的全局变量使用extern

通过合理使用常量和存储类别,可以编写出更高效、更易维护的C语言程序。

http://www.dtcms.com/a/423140.html

相关文章:

  • 计算机视觉进阶教学之Mediapipe库(一)
  • 《道德经》第八章
  • 开源 C# 快速开发(十一)线程
  • 大学生网站建设策划书响应式网站用什么开发的
  • 交换机可以做网站跳转吗wordpress 目录样式
  • 第2章 三个小工具的编写(1)
  • 生态系统NPP及碳源、碳汇模拟实践技术应用
  • 【Rust GUI开发入门】编写一个本地音乐播放器(3. UI与后台线程通信)
  • P11013 「ALFR Round 4」C 粉碎 题解
  • 跨境商城网站建设公司做小程序要多少钱
  • scratch绘制帽子花 2025年6月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析
  • 特色专业建设展示网站北京seo培训
  • 网络原理-HTTP补充1
  • 做外贸相关的网站全面的vi设计公司
  • 如何构建高效 AI 智能体
  • 9.25训练赛+Codeforces1054 (Div. 3)
  • 老Java项目访问提示orcale 19c ORA-01017: 用户名/口令无效; 登录被拒绝
  • 目标检测:yolov7算法在RK3588上部署
  • Maya Python: 安装pymel
  • 全景网站开发待遇南宁logo设计公司
  • 北京工商局网站怎么做增资网易代理暴雪
  • 制造行业订单全生命周期管理数仓项目实战
  • 《深度学习入门:基于Python的理论与实现》第7章 卷积神经网络笔记
  • 网络游戏编程 - Socket 技术以及应用 - 上 -《了解游戏网络基础知识》
  • 珠海建网站的网络公司网站名称格式
  • 舆情观察类文章写作指南与新浪舆情通应用
  • C语言——深入理解函数声明定义和调用访问
  • 网站开发大约多少钱制作一个网站的步骤是什么
  • RabbitMQ (一)简单模式
  • 阿里巴巴 Java 开发手册 v1.2.0