1

我已经用 C# 编程几个月了,但直到现在我还没有遇到过这种情况;这个指令是什么意思?

int a = 1, b;
4

6 回答 6

8

它与以下内容相同:

int a = 1;
int b;
于 2013-09-22T10:45:11.643 回答
4

上面的语句在单个语句中声明了多个相同数据类型的变量。

所以声明多个变量的局部变量声明等价于同一类型的单个变量的多个声明。

这意味着

int a=1, b;

表示a并且b两者都具有相同的数据类型,即我们用 valueint初始化变量并具有默认 int 值,即a1b0

所以等效地你可以把它写成

int a=1;
int b;
于 2013-09-22T10:53:56.893 回答
3

这取决于这些是“局部变量”(方法变量)还是“字段”(实例变量)。

对于字段,它将 a 和 b 声明为 Int32;在调用构造函数之前擦除内存(newobj/initobj)时,它们都初始化为零,然后在构造函数开始时将 a 赋值为 1。

对于局部变量,它将 a 和 b 声明为 Int32,并立即将 1 分配给 a。B 没有定义的值。“确定赋值”的规则意味着它不需要具有定义的值。但是,堆栈上的所有值都必须具有某个值——我们可以通过欺骗获得该值(例如,在 IL 中编写一个实现“out”的方法,但只是取消引用地址)。实际值取决于是否设置了 init-locals 标志。这不是 ac# 语言功能,但当前编译器确实包含此标志。这意味着本地变量的内存空间在方法开始时被擦除(设置为零)。所以逻辑值将为零,但出于不同的原因。不需要发生这种情况 - 所以它完全是一个实现细节。

于 2013-09-22T11:07:37.250 回答
2

它定义了整数“a”和“b”,将值 1 赋予 a

于 2013-09-22T10:45:11.827 回答
1

a 和 b 是整数

a 的值为 1。b 还没有值

于 2013-09-22T10:44:27.620 回答
1

a 被声明并初始化为零,而 b 刚刚声明。

于 2013-09-22T12:31:52.700 回答