C# 变量与常量详解:数据类型、内存原理及输入输出
C# 变量是存储数据的基本单元,常量使用 const 声明且不可修改。理解 int、double、string 等数据类型的特性,掌握值类型(栈)与引用类型(堆)的内存分配机制,是编写健壮 C# 程序的基础。
变量操作与声明


在 C# 中,要存储一个数值需要遵循两步:先声明变量的数据类型和名称,再为其赋予具体的值。C# 是强类型语言,常见的内置基本类型包括:
int:整型,用于存储不带小数点的数字。例如int a = 50;double:双精度浮点型,用于存储带小数点的数字。例如double b = 3.14;string:字符串类型,用于存储文本,必须包裹在双引号内。例如string c = "Hello";
第1步:变量声明与赋值
目的:在内存中开辟空间并存储数据。
代码示例:
using System;
namespace VariableDemo
{
class Program
{
static void Main(string[] args)
{
// 分开声明与赋值
int a;
a = 50;
// 注意:int 不能直接赋值为小数 (a=3.14) 会导致编译错误
Console.WriteLine(a);
double b = 3.14;
Console.WriteLine(b);
// 自动类型转换:整数可以安全转换为 double
double d = 10;
Console.WriteLine(d);
// 声明同时赋值
string name = "This is a string";
Console.WriteLine(name);
// 一次声明多个相同类型的变量
string firstName = "Hello", lastName = "World";
Console.WriteLine(firstName + " " + lastName);
}
}
}
第2步:赋值运算与更新
赋值运算符为 =。变量具有可变性,重新赋值后,原有的旧值将被覆盖并从内存中移除。例如:
int score = 80;
score = 95; // 此时内存中 score 的值从 80 变为 95
常量的定义与作用域
常量是指在程序运行期间其值不能被改变的标识符。定义常量时必须使用 const 关键字,并且必须在定义时进行初始化,赋值后严禁修改。
class Program
{
static void Main()
{
const Double pi = 3.14159; // 定义常量
const int MaxUsers = 100;
// pi = 3.14; // 错误!编译报错,常量不可二次赋值
double radius = 5.0;
Console.WriteLine($"圆的周长: {2 * pi * radius}");
}
}
局部变量的作用域
变量的生命周期和作用域通常由包含它的花括号 { } 决定。局部变量(在方法内部声明的变量)仅在该方法的执行过程中有效,一旦方法结束或跳出花括号范围,该变量将不再可访问。
特殊符号 @ 的作用
在 C# 中,@ 符号主要用于标识符和字符串字面量中:
- 作为原始字符串前缀:在字符串前添加
@可以将普通字符串转换为逐字字符串(Verbatim String)。在此模式下,转义字符(如\n,\t)会被忽略,原样输出。// 普通字符串:\n 会被识别为换行 Console.Write("第一行\n第二行"); // 逐字字符串:\n 原样打印 Console.Write(@"路径C:\Users\Admin"); // 实际输出:路径C:\Users\Admin

2.保留字作为标识符:如果需要使用 C# 的关键字(如 class, namespace, for)作为变量名或类名,可以通过在名前加 @ 来绕过限制,例如:@namespace。
数据类型之内存原理:值类型 vs 引用类型
C# 的数据类型主要分为两大类,它们在内存中的管理方式截然不同。
值类型 (Value Types)
典型成员:int, double, bool, struct, enum。
- 内存位置:主要分配在栈 (Stack) 中。
- 存储内容:直接存放数据本身的值。
- 复制行为:将一个值类型的变量赋值给另一个变量时,系统会在栈上复制一份完全独立的数据。两者互不影响。
引用类型 (Reference Types)
典型成员:class (类), interface (接口), array (数组), string。
- 内存位置:数据实体存储在堆 (Heap) 中,而变量本身在栈中仅保存指向堆中数据的“地址引用”。
- 复制行为:将一个引用类型变量赋值给另一个变量时,拷贝的是“地址”。两个变量指向堆上的同一块内存区域,修改其中任何一个引用的属性都会影响另一方。






控制台交互:读取输入与格式化输出
通过 System.Console 类,开发者可以实现程序与用户的简单文本交互。
接收用户输入:Console.ReadLine()
该方法阻塞程序直到用户按下回车键。它的返回值始终是一个字符串 (string)。如果需要数值类型,必须进行类型转换。
格式化输出:Console.WriteLine()
利用复合格式化字符串功能,可以使用索引占位符 {0}, {1} 替代冗长的拼接语法,提升代码可读性。
实战演练:获取用户信息
结合上述知识,我们可以编写一个简单的交互式程序:
using System;
namespace InteractiveDemo
{
class Program
{
static void Main(string[] args)
{
Console.Write("请输入您的姓名:");
string name = Console.ReadLine();
Console.Write("请输入您的年龄:");
// ReadLine 得到的是字符串,如需参与计算需转为 int
string ageStr = Console.ReadLine();
Console.Write("请输入性别:");
string sex = Console.ReadLine();
// 方法一:简单的字符串拼接
Console.WriteLine("您好:" + name + ", 年龄是:" + ageStr + ",性别:" + sex);
// 方法二:索引占位符格式化输出
Console.WriteLine("您好:{0}, 年龄是{1},性别:{2}", name, ageStr, sex);
}
}
}
变量命名规范建议
- 必须以字母、下划线 (_) 或 @ 开头,严禁以数字开头。
- C# 区分大小写,因此
count和Count是两个不同的变量。 - 命名应具备含义(PascalCase 或 camelCase),避免使用单字符(除循环计数器外)或无意义缩写。
- 绝对不要使用 C# 的关键字作为变量名(除非加了 @)。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









