C 语言基础-什么是常量、变量?

2023-11-05

C 语言基础-常量和变量

常量(只读)

常量是只读的固定值,在程序运行期间不会改变,不能被程序修改的量,可以是任意类型。

定义常量的方式有两种:

  • 使用 #define 宏定义
  • 使用 const 关键字

常量大体分为:

  • 直接常量(字面常量)
  • 符号常量(#define 定义的标识符常量)
  • 常变量(const修饰的变量)
  • 枚举常量

注意:严格意义说const修饰的变量称为常变量更合适,而不能被称为符号常量,因为const修饰的变量,其值不一定是不可修改的,如:int * const p2 = 10;,p2是常量指针,但*p2却是整形变量。

直接常量(字面常量)

能直接得知它的值和类型,称其为直接常量(字面常量)。

  • 布尔型(bool)

    • true、false,机器码表示1、0.
  • 整型常量(int)

    • 包括长整型、短整形、有符号型、无符号型
    • 包含了所有的整数,比如6、27、108、-190、-278等
  • 浮点型(实数)常量(float\double)

    • double:双精度浮点型,其实就是小数。比如5.43、0.145E25(代表0.145×10e-25)、0.0(注意,0.0也算是个小数)
    • float:单精度浮点型,也是小数,比double的精确程度低,也就是说所能表示的小数位比较少。为了跟double区分开来,float型数据都是以f结尾的,比如5.4f、-2.3f、0.0f。需要注意的是,绝对不能有10f这样的格式,编译器会直接报错,只有小数才允许加上f。
    • 有无符号型
  • 字符常量(char)

    • 普通字符
      • 将一个数字(09)、英文字母(az、A~Z)或者 其他符号(+、-、!、?等)用单引号(‘’)括起来,这样构成的就是字符常量。比如:‘8’、‘A’、'-'等。
    • 转义字符
      • 以字符 \ 开头的字符序列也是字符常量,如:'\n’是一个换行符。

    注意: 单引号只能括住1个字符,而且不能是中文字符,下面的写法是错误的:‘abcd’,‘1356’、‘年’。

  • 字符串常量

    • 一串字符,将一个或者多个字符用双引号(“”)括起来,这样构成的就是字符串常量。比如"6"、“小伙子”、“afas”。

符号常量

定义一个标识符(名称)来表示一个常量,该标识符称之为符号常量

使用 #define 定义符号常量

#define又称宏定义,用标识符定义为其后的常量,该标识符称为符号常量

  • 在预编译阶段起作用
  • 单纯进行文本替换,没有类型,不做类型检查,也不能进行调试
  • 只是代码的展开操作,不分配内存,占的是test段(代码段)空间
  • 宏调用时,需要程序设计者自行确保宏调用参数的类型正确。
  • 过多的使用宏定义,会增加代码长度,会使二进制文件变大,会增加编译时间
  • 宏定义允许嵌套宏定义

定义语法:#define 标识符 常量 //注意, 最后没有分号

定义字面常量:

#define A 10
#define B 'b'
#define C "123"

#define PI 3.14
// 允许嵌套,这里嵌套这已定义的PI
#define S PI*A

常变量(const修饰的变量)

通过const关键字修饰的变量,被称为常变量

  • 定义语法:const type variable = value;
  • const 定义常量与赋值要在一个语句内完成,才是合格的常变量哟。
  • 定义常量时建议使用大写字母定义,便于与变量名区分。

const定义常量正确示例:

const int var = 15;

const定义常量错误示例:

// 不合格 因为var已经是常变量啦,先声明再赋值根本行不通呀
const int var;
// 编译器报错:Cannot assign to variable 'var' with const-qualified type 'const int'
var = 15;

实例参考:

int *p; /* 定义的是指针变量 */

/**
 const 修饰的是整个右边的部分
 p1是指针变量,*p1是整型常量
 */
int const *p1 = 10; 

/**
 p2是常量指针,*p2是整型变量
 */
int * const p2 = 10; 

/**
p3与*p3都是只读常量
*/
int const * const p3 = 10;

枚举常量

枚举是由一组不变的值组成,枚举值是常量,都是int(整型),在程序运行时才会分配内存,存放在data段的静态存储区

定义语法:enum EnumName{标识符,标识符,…}

enum COLOR 
{
    RED,
    BLUE,
    GREEN
};

该语句执行后有两个变化:

  • COLOR成为枚举的名称,成为一种新类型.
  • 如果没有特殊说明,默认枚举中标示符的值是从0开始递增,每次+1,即RED=0,BLUE=1,GREEN=2,…

也可以自己定义枚举值:

enum COLOR 
{
    RED = 100,
    BLUE = 200,
    GREEN = 300
};

枚举的优点:

  • 枚举使代码更清晰,增加可读性,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。
  • 限制开发者不能随意赋值,只能在列举的值中选择。
  • 枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值。

变量(可读可写)

变量是可读可写的,可以认为是程序可操作的存储区的名称,表示在程序执行期间可以改变值,可以是任意类型。

  • 使用前必须先进行定义。
  • 变量声明时,会分配一块存储空间给变量,以便以后存储数据。
  • 如果定义了多个变量则为多个变量分别分配不同的存储空间。
  • 类型决定了变量存储的大小和布局,不同类型的变量占用不同大小的存储空间。
  • 变量的名称可以由字母、数字和下划线字符组成,建议使用驼峰命名法。

变量分为:

  • 全局变量:在函数、方法、代码块外部定义的变量被称为全局变量。
  • 静态变量:static 关键字修饰的变量被称为静态变量
  • 局部变量:在函数、方法、代码块内部部定义的变量被称为局部变量。
变量声明

表明变量的类型和名称,会为变量分配内存空间。

  • 向编译器保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。
  • 变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
  • 声明格式:类型 标识符(变量名)

int w;// 声明一个整型变量
声明多个变量格式:类型 标识符,标识符;
int a,b,c;

变量的声明有两种情况:

  • 分配存储空间的,如:int a;声明的时候就会分配存储空间。
  • 不会分配存储空间的,使用extern关键字声明变量名而不定义它。 例如:extern int a; 其中变量 a 可以在别的文件中定义的。

extern int i; //声明,不是定义
int i; //声明,也是定义

声明变量格式:类型 标识符;

int num;

变量初始化

先声明,后赋值:

int a;
a = 10;

声明同时直接赋值:

int a = 10;

注意: 变量没有初始化时不要轻易拿来使用(下面的写法是不建议的)

int score;//未初始化的变量,它的内容的不确定的,随机的。
printf(“score =%d”,score);

定义变量

定义 = 声明 + 初始化

定义变量格式:类型 标识符 = value;

int d = 9;

C 中的左值(Lvalues)和右值(Rvalues)

C 中有两种类型的表达式:

  • 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
  • 右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句:

int g = 20;

但是下面这个就不是一个有效的语句,会生成编译时错误:

10 = 20;

参考文献:

C 变量

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 语言基础-什么是常量、变量? 的相关文章

随机推荐

  • LRUCache详解

    1 概念 LRU是Least Recently Used的缩写 意思是最近最少使用 它是一种Cache替换算法 Cache的容量有限 因此当Cache的容量用完后 而又有新的内容需要添加进来时 就需要挑选并舍弃原有的部分内容 从而腾出空间来
  • 【C++类模板详解】——快速入门C++风靡全球的原因

    C 类模板详解 快速入门C 风靡全球的原因 C 是目前全球最为流行 应用范围最为广泛的编程语言之一 其强大的语言特性和灵活的代码设计方式使得它被广泛应用于各种领域 包括操作系统 数据库 游戏 框架等等 而在C 中 类模板是一种非常重要的编程
  • Unity中如何让物体和相机一起动

    Unity中开发VR或者AR应用中我们想要物体和相机跟随着进行移动 我们需要先获得相机的参数 其次我们需要修改物体的参数使得其跟随移动 public class TestCubeStability MonoBehaviour public
  • javascript 优雅实现时间格式化

    有的时候 我们需要一定格式的 时间 比如 2017 05 12 08 48 这样的格式 上代码先 时间格式化 第一种 function formatDate time var date new Date time var year date
  • 在 Silverlight 中管理动态内容交付,第 1 部分

    本文示例源代码或素材下载 目录 Silverlight 应用程序的大小 动态生成的 XAML 动态生成的 XAP 请求内容 缓存下载的内容 下载工具 下载仅含 XAML 的数据 使用 XAP 程序包 处理 XAP 内容 总结 任何使用富 I
  • 双向可控硅控制220v通断电路_什么是双向可控硅,它在交流调压电路中有哪些应用...

    一 导读 目前交流调压多采用双向可控硅 它具有体积小 重量轻 效率高和使用方便等优点 对提高生产效率和降低成本等都有显著效果 但它也具有过载和抗干扰能力差 且在控制大电感负载时会干扰电网和自干扰等缺点 下面来谈谈可控硅在其使用中如何避免上述
  • mysql join底层实现

    两个表join底层实现 5 5 版本之前 MySQL本身只支持一种表间关联方式 就是嵌套循环 Nested Loop Join 如果关联表的数据量很大 则join关联的执行时间会非常长 在5 5以后的版本中 MySQL通过引入BNLJ算法来
  • centos7自定义ssh端口号

    文章目录 一 背景介绍 二 步骤 1 查看本机系统属性 2 查看是否已安装ssh服务 3 修改默认端口 4 重启sshd服务 5 关于防火墙 6 验证登录流程 一 背景介绍 SSH 为 Secure Shell 由 IETF 的网络工作小组
  • 自动表单数据封装到javaBean中

    页面表单数据的自动封装到javaBean中 先定义一个Bean类 package com test public class Bean private String name private Integer sex public Strin
  • 第一章 微服务必备核⼼-快速⼊⻔SpringBoot2.X

    1 SpringBoot2 X和SpringCloud微服务的关系 SpringBoot 是一个快速开发框架 通过用MAVEN依赖的继承方式 帮助我们快速整合第三方常用框架 完全采用注解化 使用注解方式启动SpringMVC 简化XML配置
  • vue3 setup + ts + vite 项目问题解决:Cannot find module ... or its corresponding type declarations.(ts2307)

    昨日我尝试使用vue3 setup ts vite进行vue3项目的实现 遇到此问题 Cannot find module or its corresponding type declarations ts2307 文件报错类型以及ts官方
  • 转载:CCNP学习考试心得

    CCNP学习考试心得 当计算机屏幕上显示 Congralation时 我不禁长出一口气 心中想 终于考完了 我所说的终于考完是指 我终于完成了CCNP考试 四个月的学习 对于某些人来说可能太长了 但是要真正掌握ccnp的内容我感觉四个月还只
  • 手把手教你使用python发送邮件

    前言 发送电子邮件是个很常见的开发需求 平时如果有什么重要的信息怕错过 就可以发个邮件到邮箱来提醒自己 使用 Python 脚本发送邮件并不复杂 不过由于各家邮件的发送机制和安全策略不同 常常会因为一些配置问题造成发送失败 今天我们来举例讲
  • 混合模型简介与高斯混合模型

    高斯混合模型 混合模型概述 In statistics a mixture model is a probabilistic model for representing the presence of subpopulations wit
  • C++primer 阅读随记

    目 录 一 C 基础 1 变量和基本类型 2 字符串 向量和数组 3 表达式 4 语句 5 函数 6 类 二 C 标准库 1 IO库 2 顺序容器 3 泛型算法 4 关联容器 5 动态内存 三 类设计者的工具 1 拷贝控制 2 重载运算与类
  • 实施Microsoft Dynamics 365 CE-5. 配置Dynamics 365 CE组织,包括配置不同的Dynamics 365 CE设置。

    本章将帮助您了解Dynamics 365 CE中为个人和管理员提供的Dynamics 365配置选项 您将了解哪些选项可以为单个用户配置 哪些是管理员用户可以完成的配置 您将了解业务管理和服务管理设置下提供的不同配置选项 您还将了解Dyna
  • RobotFramework之高级API

    一 窗口跳转 跳转页面的时候需要获取句柄 Get Window Handles 获取窗口的句柄 Select Window By Handle 切换到新窗口 但是在seleniumLibrary中只有Select window 所以我们进入
  • Top K问题的两种解决思路

    Top K问题在数据分析中非常普遍的一个问题 在面试中也经常被问到 比如 从20亿个数字的文本中 找出最大的前100个 解决Top K问题有两种思路 最直观 小顶堆 大顶堆 gt 最小100个数 较高效 Quick Select算法 Lee
  • 自适应表格中input框输入文字布局被打乱

    我今天在写一个新增用户表单的时候 发现我只要输入文字 input框的高度就会改变 导致布局被打乱 这是正常排列好的样式 这是我输入中文后的样子 后来我发现输入中文后 input的高度被撑开了 我一开始没有给盒子设置固定的高度以及行高 设置完
  • C 语言基础-什么是常量、变量?

    C 语言基础 常量和变量 常量 只读 常量是只读的固定值 在程序运行期间不会改变 不能被程序修改的量 可以是任意类型 定义常量的方式有两种 使用 define 宏定义 使用 const 关键字 常量大体分为 直接常量 字面常量 符号常量 d