c语言中的变量与常量------超详细有目录

本文详细介绍了C语言中的内存分配,包括变量与常量的概念和分类。常量分为整型、字符型、浮点型等,而变量则有局部变量和全局变量之分。存储类型如auto、extern、static和register分别对应不同的内存区域和作用域。初始化和作用域是理解变量行为的关键,全局变量在整个程序生命周期内有效,局部变量则在其定义的代码块内有效。变量的生命周期和作用域对程序的运行有着直接影响。
摘要由CSDN通过智能技术生成

1 c语言中的内存的分配

定义变量意味着要开辟空间。
c语言的内存分配图

c语言的内存分配图

2.常量

c语言中对常量的定义:不能改变的量叫常量。

2.1常量的分类

整型常量:10 100 各种进制数
字符常量:‘a’
长整型常量:78L
短整型常量
无符号整型常量:78U
浮点型常量:1.2 2.3
字符串常量:例:“hello world”双引号括起来的
字符串常量:“hello world”是多少个字节?
为什么验证出来是12个字节呢?
注意:字符串常量都是‘\0’字符结尾的,因为’\0’是字符串的结束符号。
‘\0’的ASCII码值是多少: 0。

在代码中如何表示常量呢?宏来表示。
本质:就是在预处理的时候把宏直接替换成对应的数据。
宏定义的格式
#define 名字 数值 宏的定义
宏函数的格式
#define 函数名 函数表达式

3.变量

变量在c语言中的定义:能够被改变的量。

3.1变量的分类

3.1.1 局部变量

局部变量:定义在函数体(任意函数体)内部的变量。
局部变量的定义

3.1.2 全局变量

全局变量:定义在函数体外的变量。
全局变量的定义

3.2定义变量

存储类型数据类型变量名;
存储类型:决定了开辟的空间在内存分区中的哪个区。
数据类型:决定了要开辟内存空间的大小。
变量名:开辟的内存空间的名字。
变量的存储

3.3变量的存储类型

存储类型:auto、extern、static、register
auto:修饰的变量存储在栈区,只能修饰局部变量
extern:修饰的变量存储在静态区(.bss和.data统称为静态区),只能修饰全局变量
static:修饰的变量存储在静态区,局部变量和全局变量都可以修饰
register:修饰的变量存储在寄存器中,只能修饰局部变量
总结:
1、除了static和register修饰的局部变量,其他都存储在栈区
2、全局变量存储在静态区
3、静态变量存储在静态区

3.4变量的定义与初始化

初始化:在定义变量时对变量赋值
(1)int a = 10;//初始化
(2)int a;
a = 10;//赋值
1、全局变量没有初始化其值默认为0
2、局部变量没有初始化其值为随机值
auto:修饰局部变量,存储在栈区
register:修饰局部变量,存储在寄存器中。建议将变量存储在寄存器中,可以提高程序的运行速度,由于寄存器的数目比较少,最终是否存储在寄存器中,取决于编译器,如果没有寄存器,就存在栈区
extern:修饰全局变量,存储在静态区
注意:程序可以由多个.c文件组成,但是一个程序只能有且仅有一个main函数
main.c gcc main.c->a.out(程序)
ertern的使用
作用:声明作用,告诉编译器,这个全局变量已经在其他文件定义过了。
static:修饰的变量存储在静态区,既可以修饰局部变量又可以修饰全局变量。
1、static修饰局部变量,延长了局部变量的生命周期,如果局部变量没有初始化,其值为0,如果初始化,只被初始化一次。
未定义局部变量
static修饰局部变量
2、static修饰全局变量/函数,只能在本文件内使用(限制了全局变量的作用域)。
static修饰全局变量/函数

3.5变量的生命周期

局部变量的生命周期:进入局部范围生命开始,出局部范围生命结束
全局变量的生命周期:程序的生命周期。

3.6变量的作用域

1、全局变量作用域:整个工程内都可以使用。
但是需要声明。
2、局部变量作用域:在它自己的作用区域里面才可以使用,否则报错。
生命周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值