初始变量、常量

本文介绍了C语言中的变量使用原则,包括初始化、变量分类及作用域生命周期。同时,讲解了常量的种类,如字面常量、const修饰的常变量和#define定义的标识符常量,并提及了枚举常量的应用。

一、变量

1.创建变量时,最好不要只创建不赋值,例如:int age;

int main()
{
	int age = 20;//创建变量age,并赋初值为20。
	double weight = 60;//创建变量weight,并赋初值为60。
	return 0;
}

2.变量的分类

局部变量:{}内部定义的。

全局变量:{}外部定义的。

#include<stdio.h>
int a = 100;//此处变量a为全局变量
int main()
{
	int a = 80;//此处变量a为局部变量
	printf("%d\n", a);
	return 0;
}

此程序运行结果为:80

*当局部变量和全局变量名字冲突时,局部变量优先。

*最好不要使局部变量与全局变量一样。

3.变量的作用域和生命周期

(1)变量的作用域

局部变量的作用域:变量所在的局部范围。

全局变量的作用域:整个工程。

int main()
{
	{
		int a = 80;//a只在这个{}部分有作用
	}
	printf("a = %d\n",a);//此程序运行会报错,因为a没有被定义。
	return 0;
}

*如果全局变量在另一个.c文件里,需要使用extern声明。

extern int b;//b是全局变量,在另一个.c文件里,用extern声明
int main()
{
	printf("%d\n",b);
	return 0;
}

(2)变量的生命周期:变量的创建和销毁之间的时间段。

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

全局变量的生命周期:整个程序的开始到结束。

二、常量

1.字面常量

数字常量、字符常量''、字符串常量""等。

2.const修饰的常变量

const int a = 0;//a就是常变量,本质还是变量,只是具有常属性(不能被改变的属性)。

3.#define定义的标识符常量(值不能改)

4.枚举常量:可以一一列举的常量。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
enum Sex //创建一个枚举类型Sex
{
	Male,
    Female = 5,
	Secret
};              //此枚举类型变量未来的可能取值,注意要加;
int main()
{
	enum Sex s = Secret; //根据创建的枚举类型定义一个变量
	printf("s的性别代码是%d\n",s);
	return 0;
} //输出结果为6,在枚举类型的可能取值里,默认从上到下从0依次加1排序,如果其中有定义值的,根据定义值加1。
在C / C++以及Java等不同语言中,类初始化时变量常量的内存分配机制有所不同。 ### C / C++ 语言 - **变量**:C语言中的变量是给予内存位置的名称,可在程序执行期间存储相同数据类型的不同值。每个变量必须有数据类型,用于确定要存储的值的范围和类型以及要分配的内存大小,且在使用之前需在声明部分声明[^2]。在类中,成员变量若为局部变量,会在栈上分配内存,当函数执行结束,变量的生命周期结束,内存被释放;若为静态成员变量,则存储在全局数据区,在程序启动时就分配内存,整个程序运行期间都存在;若使用`new`动态分配的变量,会在堆上分配内存,需要手动使用`delete`释放,否则会造成内存泄漏。 - **常量**:C / C++ 常量分配内存存在四种情况。使用普通变量初始常量引用时,常量引用会指向该普通变量的内存地址;使用常量 / 字面量初始常量引用时,编译器可能会为常量引用分配临时内存。对于类中的常量成员,使用`const`修饰的成员常量,一般在类的对象创建时在栈上分配内存(如果对象在栈上创建),对于静态常量成员,存储在全局数据区,在程序启动时分配内存。另外,C语言数组初始化只能使用常量,字符数组初始化时,数组元素存储在相应的内存区域,而字符串常量指针指向字符串常量的存储位置,数组名是常量,指针是变量[^1][^3]。 ### Java 语言 - **变量**:Java的数据类型分为基本数据类型和引用数据类型,基本数据类型有布尔型、字符型、数值性(整数类型如byte、short、int、long,浮点类型如float、double),引用数据类型有类、接口、数组。在类初始化时,成员变量如果是基本数据类型,会在对象创建时在堆上为对象分配内存,成员变量占据对象内存的一部分;如果是引用类型,对象在堆上分配内存,引用变量存储的是对象的内存地址,而引用变量本身可能在栈上(如局部变量)或堆上(如成员变量)。静态变量存储在方法区,在类加载时就分配内存。 - **常量**:Java中使用`final`关键字定义常量。对于基本数据类型的常量,在编译时会进行常量折叠,直接将常量值嵌入到使用该常量的地方,若为成员常量,在对象创建时在堆上分配内存(对象在堆上创建时);对于引用类型的常量,同样在对象创建时分配内存,引用指向的对象在堆上,而引用本身根据情况在栈或堆上。静态常量存储在方法区,在类加载时分配内存。同时,创建多个变量时,变量名称不能重复,对于float和long类型要加上字母后缀F和L,使用byte或short类型变量时右侧数据值不能超过左侧类型范围,未赋值的变量不能直接使用,变量使用不能超过作用域范围,作用域从定义变量的一行开始到直接所属的大括号结束为止[^4][^5]。 ```java // Java 类初始化示例 class ExampleClass { // 基本数据类型成员变量 int variable; // 常量 final int constant = 10; // 静态变量 static int staticVariable; // 静态常量 static final int staticConstant = 20; public ExampleClass(int value) { this.variable = value; } } public class Main { public static void main(String[] args) { ExampleClass example = new ExampleClass(5); System.out.println(example.variable); System.out.println(example.constant); System.out.println(ExampleClass.staticVariable); System.out.println(ExampleClass.staticConstant); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值