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;
}
相关推荐
艾莉丝努力练剑1 小时前
【Linux:文件】进程间通信
linux·运维·服务器·c语言·网络·c++·人工智能
梦游钓鱼1 小时前
C++指针深度解析:核心概念与工业级实践
开发语言·c++
小野嵌入式1 小时前
3小时精通嵌入式串口通信!从零玩转ESP32+Modbus+OTA(1)
c语言·单片机·嵌入式硬件·mcu·物联网
游乐码1 小时前
c#索引器
开发语言·c#
jaysee-sjc2 小时前
十三、Java入门进阶:异常、泛型、集合与 Stream 流
java·开发语言·算法
Maggie_ssss_supp2 小时前
Linux-python
开发语言·python
百锦再2 小时前
Java Map常用方法和实现类深度详解
java·开发语言·spring boot·struts·kafka·tomcat·maven
枫叶丹43 小时前
【Qt开发】Qt界面优化(五)-> Qt样式表(QSS) 子控件选择器
c语言·开发语言·数据库·c++·qt
Never_Satisfied3 小时前
在c#中,实现把图片文件拖动到pictureBox控件上
开发语言·c#