news 2026/6/2 4:04:02

《变量的定义》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《变量的定义》

一、变量的定义与分类

包括变量的命名规则、作用域、生命周期、使用注意

1、变量的概念

变量是用来存储数据的被命名的内存位置。
变量需要用一个有名字的、具有特定属性的存储单元来存放数据。
变量必须先定义后使用或先声明后使用,定义时指定名字和类型,也可以指定初值

2、变量的定义与初始化

<存储类型> <数据类型> 变量名 = 初始值;

2.1、存储类型说明符

——用于控制变量的存储位置、生命周期和作用域

auto:局部变量默认关键字(只能用于函数内或块内)
static:声明为静态变量(生命周期为整个程序,但作用域受限)
extern:声明为外部变量,全局变量的默认存储类型
register:建议编译器将变量存储在寄存器中,以提高访问速度
typedef:用于定义类型别名;

2.2、数据类型说明符

——用于定义变量或函数的基本数据类型

int:整数类型(4个字节)
signed:有符号整型
unsighed:无符号整型
short:短整型(2个字节)
char:字符类型(1个字节)
long:长整型(4个字节)
float:浮点型(4个字节)
double:双精度浮点型(8个字节)
bool:布尔类型
void:空类型,声明函数无返回值或无参数,或未定义指针类型

3、变量的命名规则

(1)只能由字母(包括大写和小写)、数字和下划线(_)组成
(2)不能以数字开头
(3)长度不超过63个字符
(4)变量名区分大小写
(5)变量名不能使用关键字

4、变量的作用域

作用域定义了变量在代码中的可见范围,C 语言的作用域包括:
局部作用域 (Local Scope)
仅在函数、代码块或文件内可见。
全局作用域 (Global Scope)
在整个程序中可见

5、变量的生命周期

变量的生命周期是指变量从创建到销毁的整个过程;
变量类型
存储位置
生命周期
作用域
自动变量(auto)
栈(stack
随着函数或代码块的进入创建,离开销毁
定义它的函数或代码块内部
静态局部变量(static)
静态数据区
从程序开始到程序结束,只初始化一次
定义它的函数内部(或代码块内部)
静态全局变量(static)
静态数据区
从程序开始到程序结束
定义它的文件内部
外部变量(extern)
静态数据区
从程序开始到程序结束
可以在其他文件中通
extern声明访问

5、局部变量与全局变量

局部变量:作用域仅限函数或代码块内部;生命周期随函数调用而开始,随函数的结束而销毁;通常存储在栈中,未初始化时值是未定义的(随机垃圾值)。
全局变量:作用域可以扩展到整个程序,生命周期从程序开始到结束,存储在静态存储区,未初始化时默认值为0

5.1、使用变量时注意

1、变量必须先声明,后使用
2、变量一旦声明,就不能再更改其类型。
3、同一个作用域内不能命名重名的变量。
4、变量遮蔽:当在一个嵌套的作用域中定义了与外部作用域中同名的变量时,内部变量会遮
蔽外部变量。需要注意变量的实际作用域,以避免意外的结果;
① 特殊情况:同名变量
如果局部变量和全局变量名字一样,在局部作用域内,局部变量优先(就 近原则)
#include <stdio.h> int a = 100; // 全局变量 int main() { int a = 10; // 局部变量 printf("a=%d\n", a); // 10 输出 return 0; }
5、注意变量的占用空间和取值范围
6、注意变量的初始化

二、整型变量:int

——包括原码、反码、补码、大小端系统

1、原码

原码:符号位加上真值的绝对值,即用第1位表示符号,其余位表示值;
[1111 1111 , 0111 1111]=[-127 , 127]
  • 0111 1111

    • 最高位(第 1 位)是符号位:0表示正数
    • 剩下 7 位是数值:111 1111,十进制是127
    • 所以它表示+127
  • 1111 1111

    • 最高位是符号位:1表示负数
    • 剩下 7 位是数值:111 1111,十进制是127
    • 所以它表示-127

2、反码

正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
[+1] = [0000 0001]原= [0000 0001]反
[-1] = [1000 0001]原= [1111 1110]反
计算时溢出的进位需要加到最低位

3、补码

正数的补码就是其本身;负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1);
[+1] = [0000 0001]原= [0000 0001]反= [0000 0001]补
[-1] = [1000 0001]原= [1111 1110]反= [1111 1111]补

4、大端和小端系统

大端模式:高字节存储在低地址,低字节存储在高地址。
小端模式:低字节存储在低地址,高字节存储在高地址。

5、unsigned和signed的异同

相同点:都是在一段存储空间存储的数字计算方法一样;
不同点:混合判断时格式转换不同,溢出后的取值不算严格上的不同点,只是表示方法不同,计算方式是一样的
//混合判断时 #include <stdio.h> int main(void) { unsigned int a = 5;//无符号数 signed int b = -5;//有符号数 if(b < a) { printf("b is less than a\n"); } else { printf("a is less than b\n"); } return 0; }//结果是 a is less than b
//保持类型一致 #include <stdio.h> int main(void) { signed int a = 5;//无符号数 signed int b = -5;//有符号数 if(b < a) { printf("b is less than a\n"); } else { printf("a is less than b\n"); } return 0; }//结果是 b is less than a;

6、转换规则

在涉及多个不同数据类型的算术运算时,编译器会按照特定规则将数据转换为相同的类型
“较低”级别的类型 →“较高”级别的类型——以避免数据丢失。
char(8位)< short int(16位)< int(32位)< long long(64位)
signed < unsigned
int < float < double (注意数据丢失)

7、printf()的表示

对于整型变量,printf 支持以下常用的格式化符号:

%d 或 %i:用于输出有符号的十进制整数
%u:用于输出无符号的十进制整数
%o:用于输出八进制整数
%x 或 %X:用于输出十六进制整数(%x 使用小写字母,%X 使用大写字母)
在 printf 中,还可以使用修饰符指定不同大小的整型变量:
%h:用于表示短整型(short)
%l:用于表示长整型(long)
%ll:用于表示长长整型(long long)
可以通过修饰符来控制输出的宽度、对齐方式、填充字符等:
宽度:指定输出字段的最小宽度。
-(左对齐):默认情况下,输出是右对齐的,使用 - 可以使其左对齐
0(零填充):用零来填充空白位置,而不是默认的空格;

三、浮点型变量:float

1、浮点型案例

浮点数:既包含小数又包含整数的数据类型,也称为实数型
浮点型常量默认为double型,可用F或f后缀标记为float型,用L或l标记为long double型。
#include <stdio.h> int main(void) { float a; a = 7 / 2.0; a = 7.0 / 2; printf("%f %f\n",a,a); return 0; }//结果是3.500000;
#include <stdio.h> int main(void) { long double a = 3.1415926; __mingw_printf("%Lf\n",a);//简单说:__mingw_printf = MinGW 版的 printf return 0; }//结果是3.141593; //普通 double用%lf打印; //long double 必须用 %Lf(大写 L),用错会打印出错误的数值;

2、赋值和运算细节

赋值时,如果给浮点型赋值整数,系统会自动为整数补上小数点。
如果给整数型变量赋值了小数,系统会直接将小数舍去变为整数,注意这里是舍去而不是四舍五入。
在有乘除的运算中,只要有一个数是浮点数,系统会自动把其他整数转换成浮点数
给浮点数赋值的时候,如果赋值号右边是计算式,要把右边的运算数变成小数才行。

3、printf()中对小数的输出

float 和 double
%f:以小数点格式输出。例如:3.141592
%e:以科学计数法格式输出。例如:3.141592e+00
%g:根据数值的大小,自动选择 %f 或 %e,以简洁的方式输出
long double
%Lf:以小数点格式输出 long double 类型的值。
%Le:以科学计数法格式输出 long double 类型的值。
%Lg:根据数值的大小,自动选择 %Lf 或 %Le,以简洁的方式输出。
可以在 %f、%e 或 %g 中通过指定精度来控制小数点后保留的位数。语法为:
%[宽度].[精度]f:指定输出的最小宽度和小数点后的精度。
使用 - 符号可以左对齐输出。
如果在 C 语言中写一个小数默认情况下它会被解释为 double 类型。如果你想明确地告诉编译器这个小数是 float 类型或 long double 类型,就需要在小数的末尾加上 f 或 L

四、字符型变量:char

1、ASCII码

ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符;
常见ASCII码的大小规则:数字< 大写字母 < 小写字母
1.数字比字母要小。如 “7”<“F”;
2.数字0比数字9要小,并按0到9顺序递增。如 “3”<“8” ;
3.字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z” ;
4.同个字母的大写字母比小写字母要小32。如“A”<“a” 。
几个常见字母的ASCII码大小:“A”为65;“a”为97;“0”为 48

2、转义字符

转义字符
含义
ASCII值 (十进制)
ASCII值 (十六进制)
\n
换行符 (newline)
10
0x0A
\r
回车符 (carriage return)
130x0D
\t
制表符 (tab)
9
0x09
\b
退格符 (backspace)
8
0x08
\f
换页符 (form feed)
12
0x0C
\a
响铃符 (alert/bell)
7
0x07
\v
垂直制表符 (vertical tab)
110x0B
\\
反斜杠 (backslash)
92
0x5C
\'
单引号 (single quote)
390x27
\"
双引号 (double quote)
340x22
\?
问号 (question mark)
63
0x3F
\0
空字符 (null character)
0
0x00

五、布尔型变量:bool

1、布尔类型的引入

1.1、概念

布尔类型是一种只能表示true(真)或false(假)两种状态的数据类型。C99标准引入。
作用:布尔类型主要用于条件判断和逻辑操作
1. 提高代码的逻辑性和意图表达
2. 防止潜在的编程错误
3. 与现代编程语言接轨
4. 代码优化和类型检查
5. 统一和标准化

1.2、语法格式

C99标准之前,C语言没有原生的布尔类型,通常使用整数代替布尔值(如0表示false,非零值表示true),C99标准中引入了布尔类型,需要通过包含<stdbool.h>库来使用。
定义与使用:
引入头文件:#include <stdbool.h>
定义布尔变量:bool flag = true;
布尔值:true和false

1.3、布尔变量的操作

条件判断:
使用bool变量进行条件判断:if (flag) { /* code */ }
逻辑操作符:
逻辑与:&&
逻辑或:||
逻辑非:!

1.4、bool类型与整数的相互转换

布尔类型 (bool) 和整数类型之间存在隐式转换规则:
任意非零整数在转换为布尔类型时,都会被视为 true
整数值 0 转换为布尔类型时,会被视为 false
当布尔类型的值用于整数表达式时:
true 会自动转换为整数值 1;
false 会自动转换为整数值 0;

1.5、自定义bool类型

在 C89 标准及其之前版本(如 C90),C 语言并没有原生支持 bool 类型。在这些版本的 C 语言中,布尔值通常使用整数来表示:
0 表示 false。
非零值(通常为 1)表示 true。
#include <stdio.h> #define bool int #define true 1 #define false 0 int main(void) { bool flag = true; if(flag) { printf("True\n"); } else { printf("False\n"); } return 0; }//结果:ture

六、静态变量static

定义:使用 static 关键字声明的变量,既可以是局部变量也可以是全局变量

静态局部变量仅在当前函数内可见,但其生命周期贯穿整个程序的运行
静态全局变量只能在声明它的文件中访问
生命周期:从程序开始运行时创建,直到程序结束时销毁,即使函数已经退出,静态变量的值也不会丢失。
使用场景:
• 维护状态信息:在函数内部使用静态变量可以保留函数的状态信息,从而在多次调用之间维持该状态
• 限制作用域:通过将变量声明为 static,可以限制其作用域到当前文件或函数,避免名称冲突,增强封装性。
性能优化:静态变量的值在多次调用之间保持不变,有助于避免不必要的初始化

七、变量的指针

1、什么是指针?

指针是一个存储内存地址的变量,指向另一个变量的存储位置;通过指针可以间接访问或操作变量的值。

2、指针操作

指针的基本操作:
取地址操作符 &,获取变量的地址。
示例:
int y = 20;
int *p = &y; // p 存储的是 y 的内存地址
解引用操作符 *
访问指针指向的变量值。
示例:
int z = 30;
int *q = &z;
int value = *q; // value 将被赋值为 z 的值 30;
野指针:
指针变量在被创建后,如果不被赋值,他的缺省值是随机的,它的指向是不明确的,这样的指针形象地称为“野指针”
赋空值:
p=0
p='\0’
p=NULL
#include <stdio.h> int main(void) { int x = 10; int y = 20; int *p = &x; int *q = &y; printf("%d %d\n",p,*p); printf("%d %d\n",q,*q); return 0; }

3、指针的加法

当你对指针执行加法操作时,实际上是将指针向前移动多个元素的大小
例如:
如果 p 是指向 int 的指针,p + 1 会将指针 p 移动到下一个 int 类型的内存地址(通常是增加 sizeof(int) 字节);

4、指针的减法

类似于加法,减法操作将指针向后移动。
例如:
p - 1 会将指针 p 移动到前一个 int 类型的内存地址;

5、指针自增和自减

指针也可以使用自增(++)和自减(--)操作符。p++ 会将指针移动到下一个元素,p-- 会将指针移动到前一个元素。
※p++ = p + 1 ; p-- = p - 1 ;

八、进制转换与存储单位

1、十进制与二进制

2、十进制与八进制

3、十进制与十六进制

4、二进制与八进制

5、二进制与十六进制

6、计算机的存储单位

位(bit):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位
字节(Byte,B):计算机中数据的基本单位,每8位组成一个字节。各种信息在计算机中存储、
处理至少需要一个字节。
KB:早期用的软盘有360KB和720KB的,不过软盘已经很少使用。
MB:早期微型机的内存有128MB、256MB、512MB,目前内存都是1GB、2GB甚至更大。
GB:早期微型机的硬盘有60GB、80GB,目前都是500GB、1TB甚至更大。
TB:目前个人用的微型机存储容量也都能达到这个级别了,而作为服务器或者专门的计算机,不可缺少这么大的存储容量。
1Byt = 8bits
1KB=1024B=2的10次方B
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 4:02:58

手把手教你给Nginx服务器开启IPv6访问(附本地测试与验证全流程)

从零实现Nginx IPv6访问支持&#xff1a;配置详解与实战排错指南在互联网基础设施快速迭代的今天&#xff0c;IPv6的普及已成为不可逆转的趋势。根据全球互联网注册机构统计&#xff0c;截至2023年&#xff0c;全球IPv6用户普及率已突破40%&#xff0c;部分国家甚至超过80%。对…

作者头像 李华
网站建设 2026/6/2 4:02:09

2025_NIPS_Analyzing Vision Transformers for Image Classification in Class Embedding Space

一、文章主要内容总结 该研究聚焦视觉Transformer(ViT)的机制可解释性,提出了一种通过将ViT中间表示和参数矩阵投影到类嵌入空间的框架,以揭示其图像分类任务中类别表征的构建过程。核心内容包括: 核心方法:借鉴NLP中Transformer的解释思路,将ViT各层隐藏状态(图像tok…

作者头像 李华
网站建设 2026/6/2 4:02:09

汉知宝企业知识产权管理软件|多项版权见证创新实力

为更好地服务全国企业用户&#xff0c;助力企业实现高效、便捷的知识产权案件管理&#xff0c;汉知宝科技始终坚持自主创新&#xff0c;研发了一系列高效、实用且显著节约人力成本的知识产权管理方法与系统&#xff0c;并申请了多项知识产权&#xff0c;涵盖11项专利、27项软件…

作者头像 李华
网站建设 2026/6/2 4:01:55

【Excel提效 No.086】一句话搞定把表格内容转换成其他格式

目录 你是否也遇到过这些问题 1. 前置准备 2. 超简单AI自动化解决方案 第1步:准备好你的原始数据 第2步:针对指定的文件下达指令 第3步:验收 更多格式转换模式 模式一:Markdown格式转换(本文主方案) 模式二:JSON格式转换 模式三:HTML格式转换 模式四:SQL格式转换 资源…

作者头像 李华