常量和变量

1. 常量

1.1 概述

在开发中不会发生改变的量,称之为常量。

生活很多内容都是常量,例如: 重力加速度,光速,圆周率,温度25摄氏度,一个标准大大气压下的水密度。

1.2 开发中使用的常量

C/C++ 中针对于常量进行了数据类型划分

  • 整数类型 1, 2, 3, -1, -2, -3

  • 浮点数类型 0.618, 11.11, 3.1415

  • 字符类型

    • 数据要求,字符常量要求使用英文单引号包含的单个内容

    • C/C++ 字符类型有且只占用一个字节内存,中文通常情况下占用的内存字节数是 2 ~ 3 个字节,C/C++ 字符类型无法描述/使用中文。在嵌入式开发中,中文的支持效果一般。

      'A' '1' ',' ':' ' '
      'abcd' 不允许出现多个字符
  • 字符串类型

    • 数据要求,字符串常量使用英文双引号包含所有数据内容

    • 虽然字符串内容支持中文,但是在开发中尽量少用中文形式。

      "课间去搞一杯瑞幸瑰夏"
      "瑰夏,花魁"
      "Please~~~"
  • C++ 特有常量类型 bool/布尔 类型

    • bool 类型有且只有在 C++ 中支持,对应常量

      true false
1.3 常量案例代码

了解一下 C 语言 printf 函数所需的常用数据占位符。

%d # 整数
%c # 字符
%s # 字符串
%f # 浮点
#include <stdio.h>
​
int main(int argc, const char * argv[])
{
    // 整数常量
    // %d 是整数数据在 printf 打印操作对应的数据占位符
    printf("integer value :%d\n", 10);
    printf("integer value :%d\n", 100);
    printf("integer value :%d, %d\n", 300, 2000);
​
    // 浮点常量
    printf("float value : %f\n", 3.5);
    printf("float value : %f\n", 5.5);
    
    // 字符常量
    printf("char value : %c\n", 'A');
    printf("char value : %c\n", '1');
    printf("char value : %c\n", '中');
    
    // 字符串常量
    printf("string value : %s\n", "中文支持,但是不常用");
    printf("string value : %s\n", "Input parameter is invalid!\n");
    return 0;
}
1.4 字符常量【重点】
1.4.1 编码集

开发中字符数据都是一张图片,计算机将每一个文字对应的图片进行编号,同一个编号就是一个编码集。开发中常用的编码集

  • ASCII : American Standard Code for Information Interchange 在任何一个电子设备上都支持。并且要求目前流行于开发中所有编码集,必须支持 ASCII。在编码集的前 128 位 或者前 256 位必须支持 ASCII 码。主要包括英文字母,数字字符,标点符号,和不可见字符。

  • GBK:新国标,支持中文简体和少数民族文字

  • GB_2312:之前的国标,仅支持中文简体和部分少数民族文字

  • BIG5: 中文繁体字编码

1.4.2 ASCII 码表

重点

  • 开发中使用字符请使用字符本身,不允许使用字符对应的编码值,增强代码的阅读性,严格遵守数据类型一致化要求。

  • 在 ASCII 中编码值 0 ~ 31 前 32 个字符为不可见字符。

  • 数字字符顺序是 '0' ~ '9'

  • 英文字母中,大写字母编码值小于小写字母

  • 英文字母在 ASCII 表中,英文字母大写到英文字母小写之间有其他字符

十进制 ASCII

八进制 ASCII

1.4.3 转义字符

要求:使用 \开头,可以将部分特定含义字符,转换为无特殊含义,仅作为字符本身使用,或者将特定的无意义字符转换为特殊功能字符。

  • 常用的特殊含义转无意义

\" // 【常用】双引号是 C/C++ 中的字符串常量标记。将双引号作为字符串内容的一部分,不再作为字符串开始和结尾标记
\' // 【少见】同理双引号,主要用于字符数据
\\ // 【少见】转义转义字符
  • 常用无意义转特殊含义

\n // 【常用】回车
\r // 【后期常用】换行,后续课程发送到网络端字符串数据需要提供以 "\r\n" 结尾
\t // tab 制表符
\a // 可以用于蜂鸣器工作,基本上无法使用
1.4.4 来自 2015 年的面试题

请问 \40 是什么?

结果是一个 空格 space 字符,对应 ASCII 十进制编码为 32,八进制编码为 040
​
1. \ 之后的数值默认为八进制,且八进制 0 开头标记可以省略。
2. 对应的是 ASCII 八进制 040 编码字符,也就是 space 空格
​
建议
    1. 开发中字符数据请使用字符本身,不要搞歪门邪道!!!
    2. 如果在面试中遇到类似问题,拍照发群里,大家一起看!!!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, const char * argv[])
{
	printf("sizeof : %ld\n", sizeof("Hello\076abc")); // sizeof : 10
	printf("strlen : %ld\n", strlen("Hello\076abc")); // strlen : 9

	return 0;
}
2. 变量【小重点】
2.1 概述

变量是开发中最常用的数据形式,也是在后续代码执行过程中,检测代码情况,代码形式,代码运行状态。都是通过变量数据是否满足执行预期判断。

生活角度分析变量形式,例如 温度,湿度,速度,年龄,时间,发量,体重。变量存在核心要求

  • 数据类型,数据形式

  • 名称,约定俗成,见名知意

  • 容器概念和数据变化

2.2 C/C++ 定义变量的格式

格式要求

数据类型 变量名 = 初始化数据;
  • 数据类型:限制当前变量存储的数据类型,数据形式,按照开发要求有且只允许存储对应数据类型,严格遵守数据类型一致化要求。基本数据类型可以参考【常量类型】

  • 变量名: 操作当前变量对应的名称,要求见名知意,约定俗成,并且变量名在一定范围内唯一。

  • = :赋值号,将赋值号右侧的数据,赋值给左侧的变量

  • 初始化数据 : 要求满足当前数据类型所需,提供必要的初始化数据,并且在开发中,变量一行仅定义一个,同时直接进行初始化操作。

2.3 C 语言基本数据类型【重点】

在 C 语言中基本数据类型

  • 整型 : short int long

  • 浮点型: float double

  • 字符型: char

2.3.1 整型数据类型

整型数据类型主要用于存储开发中使用的整数数据,通常情况下默认整数为 int 类型

  • int 类型要求是在 32 位机及其以上占用 4 个字节,如果是 16 位机占用 2 个字节

  • long 类型要求是在 64 位机占用 8 个字节,如果是 32 位机占用 4 个字节

  • 要求,后续描述 int 和 long 类型专用的内存空间字节数,请明确分析对应的系统/计算机情况。

数据类型占用内存字节数数据存储范围
short2 字节(16bit)-0 ~ 65535
int4 字节(32bit)0 ~ 2^32 - 1
long8 字节(64bit)0 ~ 2^64 - 1
2.3.2 浮点数据类型

浮点类型用于存储小数/浮点数

  • 计算机系统默认浮点数对应的数据类型为 double 类型,为了更好的数据存储精度和对应的数据完整性。

  • 在后续的 STM32 学习中,必须知晓 M3(F1) 架构和 M4(F4) 架构区别,M4 架构相较于 M3 多出两个模块 DSP(数字信号处理), FPU(浮点类型数据处理器),硬件角度 M4 比 M3 性能更好,同时硬件支持浮点类型数据。在 M3 中浮点类型数据支持是依赖于 STM32 标准库完成。

  • 浮点类型数据在使用时,需要明确的注意数据完整性和稳定性问题,通常情况下如果对数据的精度要较高要求,不会单一使用浮点类型数据解决问题,可以采用字符串常量数据保证数据的完整性和稳定性。

数据类型占用内存字节数数据存储范围
float4 字节(32bit)10^38
double8 字节(64bit)10^308
2.3.3 字符数据类型

在开发中存储字符数据,或者存储一个字节的数据。后续开发中会使用到以下类型

  • u_int8, u_int16, u_int32, u_int64

同时字符类型数据在使用时,请使用字符本身,不允许使用编码值。

数据类型占用内存字节数数据存储范围
char1 字节(8bit)ASCII 码
2.4 变量名称要求

代码中的变量名需要按照标准要求完成,变量名在开发中也认为是【标识符】,开发中标识符是存在一定的规范。

  • 标识符可以使用的字符范围英文字母(A ~ Z a ~ z),数字字符(0 ~ 9),唯一可以使用的标点符号下划线 (_)

  • 标识符要求必须英文字母开头

  • 标识符没有严格的长度限制,一般会遵循阅读性至上原则

  • 标识符要求见名知意,动宾结构,约定俗成。

  • 标识符需要满足一定的命名规则

    • 下划线命名规则

      • 要求不同的英文单词之间使用 _ 下划线分割

      get_message
      send_msg 
      read_file_data 
      save_data_to_file
    • 驼峰命名规则

      • 小驼峰 第一个英文单词首字母小写,之后的每一个单词首字母大写

      getMessage
      sendMsg 
      readFileData 
      saveDataToFile
      • 大驼峰 每一个单词首字母大写

      QPushButton QLabel QRadio QString QList QVector
  • 标识符不可以使用 C/C++ 占用的关键字和保留字。

  • 标识符在一定范围内唯一

2.5 变量定义案例
#include <stdio.h>

/*
 main 函数执行命令行参数内容
 argc argument count 参数个数
 argv argument value 参数值
 */
int main(int argc, const char * argv[])
{
	// 整数变量
	short num1 = 10;
	int num2 = 20;
	long num3 = 1000;

	printf("num1 : %d\n", num1);
	printf("num2 : %d\n", num2);
	printf("num3 : %ld\n", num3);
	printf("sizeof(short) : %ld\n", sizeof(short));
	printf("sizeof(int) : %ld\n", sizeof(int));
	printf("sizeof(long) : %ld\n", sizeof(long));
	printf("------------------------------------------\n");

	// 浮点变量
	float num5 = 5.5;
	double num6 = 6.6;

	printf("num5 : %f\n", num5);
	printf("num6 : %lf\n", num6);
	printf("sizeof(float) : %ld\n", sizeof(float));
	printf("sizeof(double) : %ld\n", sizeof(double));
	printf("------------------------------------------\n");

	// 字符变量
	char ch1 = 'A';
	char ch2 = 'B';
	char ch3 = '1';
	
	printf("ch1 : %c\n", ch1);
	printf("ch2 : %c\n", ch2);
	printf("ch3 : %c\n", ch3);

	printf("sizeof(char) : %ld\n", sizeof(char));
	return 0;
}
2.6 变量定义常见问题
2.6.1 未定义直接使用

存在两种情况

  • 变量没有定义,直接使用

  • 变量定义,但是后续使用中,拼写错误,导致报错未定义问题。

2.6.2 未初始化直接使用

一个变量如果在没有赋值的情况下进行使用,会导致【野值】问题。

任何一个 C/C++ 中的变量必须先赋值后使用。野值有可能导致代码中出现一些无法复现,无法预估,无法进行明确定位的错误。

后续演示野值情况!!!

2.6.3 变量重复定义

变量名在同一个大括号中唯一,不可以重复定义!!!

2.6.4 数值使用建议

浮点类型数据常量默认为 double 类型,给予 float 类型赋值时,严格来说是不满足数据类型一致化要求。建议使用浮点类型数据常量给予 float 类型赋值,需要在常量之后使用大写 F 明确告知编译器,当前常量为 float 类型常量

float num = 3.5F; // F 明确限制当前 3.5 为 float 类型。

长整数数据赋值,因为整数常量默认都是 int 类型数据,为了考虑数据类型一致化要求,在给予 long 类型变量赋值使用的常量,可以加上大写 L,明确告知为long 类型,但是很少用!

long num = 10L; // L 是告知当前 10 为 long 类型常量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值