C语言学习(四)——C语言变量、常量

在编程中,变量是程序中用于存储数据的容器(存储区),具有名称、类型和值,其数值是可变的。

在C语言中,变量在声明时必须指定数据类型,如"int","float"、"char"等,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中。

为了指定存储区域,要为每一个变量赋予唯一的名称,也称为标识符。标识符由字母、数字和下划线字符组成。它必须以字母或下划线开头。注意,在C语言中,对大小写比较敏感,大写字母和小写字母是不同的。

1.声明(创建)变量

声明变量就是告诉编译器在何处需要创建变量的存储,以及如何创建变量的存储。声明如下:

cpp 复制代码
type VariableName = value;

其中,type指的是变量的类型,VariableName指变量名,value指对应的值。

如:

cpp 复制代码
//定义一个整型变量
int num = 18;
//或者
int num1;
num1=20;
//定义一个浮点型变量
float pi=3.14;
//定义一个字符型变量
char MyCha='a';
//定义指针变量
int *ptr;
//定义多个变量
int i,j,k;

注:变量在创建时尽量初始化,若未初始化时,值可能为随机垃圾数据。对于全局变量或者静态变量,其默认初始值为:

  • 整型变量(int、short、long等):默认值为0。
  • 浮点型变量(float、double等):默认值为0.0。
  • 字符型变量(char):默认值为'\0',即空字符。
  • 指针变量:默认值为NULL,表示指针不指向任何有效的内存地址。
  • 数组、结构体、联合等复合类型的变量:它们的元素或成员将按照相应的规则进行默认初始化。

但是局部变量不会自动初始化为默认值,所以在使用局部变量之前,应为其赋一个初始值。

2.全局变量和局部变量

(1)全局变量

  • 定义在函数外部的变量,作用域整个工程。
  • 默认初始化为0(整型)或0.0(浮点型),生命周期贯穿整个程序。

全局变量例子:此处的a定义在函数外。

cpp 复制代码
#include <stdio.h>

int a = 20;

void func();

int main()
{
	
	func();
	printf("a的值为:%d\n", a);

	return 0;
}
void func()
{
	printf("a的值为:%d\n", a);
}

(2)局部变量

  • 定义在函数或代码块内部的变量,作用域仅限于所在代码块。
  • 未初始化时值为随机垃圾数据,生命周期随代码块结束而释放。

局部变量例子如下:此处的a在函数func()中定义,所以在main()函数中无法调用。

cpp 复制代码
#include <stdio.h>

int main()
{
	func();
	printf("a的值为: %d", a);

	return 0;

}
void func()
{
	int a = 20;
	printf("a的值为: %d", a);
}

3.常量

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

C语言中的常量分为以下以下几种:

  • 字面常量
  • const 修饰的常变量
  • #define 定义的标识符常量
  • 枚举常量

(1)常见的字面常量

如:

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

cpp 复制代码
213         /* 合法的 */
211u        /* 合法的 */
0xCaaL      /* 合法的 */
30ul        /* 合法的 */
086         /* 非法的:8 不是八进制的数字 */
011UU       /* 非法的:不能重复后缀 */

浮点常量:浮点常量由整数部分、小数点、小数部分和指数部分组成。

cpp 复制代码
3.14159       /* 合法的 */
314159E-5L    /* 合法的 */
510E          /* 非法的:不完整的指数 */
float MYFLOAT= 3.14f;

字符常量:

字符常量是括在单引号中,例如,'x' 可以存储在 char 类型的简单变量中。

字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t')。

在C语言中,特定的转义字符如下:

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

字符串常量:

在C语言中,字符串通常括在双引号" "中。字符串常量在内存中以 null 终止符 \0 结尾。例如:

cpp 复制代码
char myStr[] = "Hello, world!"; //系统对字符串常量自动加一个 '\0'

(2)定义常量

在C语言中,通常有两种方式定义常量:

  • 使用#define预处理器:使用#define定义一个常量,它在编译时会被替换为对应的值。
  • 使用const关键字:const关键字用于声明一个只读变量,该变量在使用过程中不能被修改。
cpp 复制代码
#include <stdio.h>
#define PI 3.14

int main()
{
	float radius = 5.0;
	float area = PI * radius * radius;
	printf("圆的面积为:%.2f\n", area);
	return 0;
}

使用const定义常量时,必须在声明时就赋予值,后续不能修改。

cpp 复制代码
#include <stdio.h>
#define PI 3.14

int main()
{
	const float RADIUS;
	RADIUS= 5.0;   // 此处发生错误:不能修改常量变量
	float area = PI * RADIUS* RADIUS;
	printf("圆的面积为:%.5f\n", area);
	return 0;
}

正确的为:

cpp 复制代码
const float RADIUS=5.0;

#define和const的区别为:#define只是进行简单的文本替换,不进行类型检查,且没有作用域限制。const是声明一个具有类型的常量,其只在其定义所在的作用域内有效。

(3)枚举常量

枚举是C语言中的一种基本类型,用于定义一组具有离散值的常量。定义一个枚举类型需要使用enum关键字。

格式为:

cpp 复制代码
num 枚举名 {枚举元素1,枚举元素2,......};
cpp 复制代码
#include <stdio.h>
enum STATE
{
	IDLE=1, RUNNING, ERROR
}state;

int main()
{
	state = RUNNING;
	printf("%d\n", state);
	return 0;
}
相关推荐
Scott9999HH5 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社6 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海6 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖7 小时前
JDK 26 新特性详解
java·开发语言
马优晨7 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区9 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大10 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai10 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜10 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa10 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio