-9

如果我写a = a +115MessageBox将返回 215,但如果像a=115;这样写将显示 115。

这是为什么?

private void button1_Click(object sender, EventArgs e)
{
    int c=100;
    MessageBox.Show(Count(c).ToString());
}

public int Count(int a)
{
    a=115;
    return a;
}
4

8 回答 8

4

这个问题很难解读。我认为您已经尝试了您命名的函数的两个不同版本Count,如下所示。

考虑这个版本的函数:

public int Count1(int a)
{
    a = 115;
    return a;
}

无论您作为参数传递什么值,它都会返回 115。您正在使用 assignment 覆盖参数a = 115。因此,该参数完全没有意义。

现在是另一个版本:

public int Count2(int a)
{
    a = a + 115;
    return a;
}

此版本的函数接收变量中的参数a。然后它将 115 添加到该值,并返回结果。所以当你这样称呼它时:

Count2(100)

返回的值为 215。

如果您编写这样的函数可能会更容易理解:

public int Count1(int a)
{
    return 115; //very clearly the input parameter is ignored
}

public int Count2(int a)
{
    return a + 115; //but in this version, the input parameter is used
}

这些版本与您的版本完全相同,但我希望您会发现它们更容易理解。

于 2012-12-03T16:28:48.733 回答
1

a = 115 将整数变量设置为 115,a += 115 或 a = a + 115 会将 115 添加到 a 的值,然后返回该值的结果

于 2012-12-03T16:28:18.267 回答
1

如果您传递100给具有 a = 100 + 115 语句的函数,a = a + 115那么它应该返回 215

public int Count(int a)
{
    a = a + 115; // a = 100 + 115 
    return a;
}
于 2012-12-03T16:29:00.450 回答
1

当您这样做时a=115,它会显示,115因为您正在分配115a。当您使用 时=,您将右值分配给左值。当你这样做时,你所做的和你做的差不多int c=100。你指定c100.

当你传入c, cis 100,而你的公式是a=a+115, 那么a将会是215. 当你像你正在做的那样传递一个值时,a将是100. 所以,当你做你的公式时a=a+115,你说的是a=100+115,你会得到215

于 2012-12-03T16:29:29.250 回答
1

是否因为您认为“a”和“c”是不同的值而感到困惑?

Count(int a) 方法并不关心值的名称最初是“c”。一旦它在该方法内部,它将仅称为“a”。

public int Count(int a)
{
    a = a+115;
    return a;
}

所以一步一步:

1) 将值 100 传递给 Count() 方法。(a = 100)

2) Count() 将 a 的值设置为 100 + 115。 (a = 215)

3) 215 返回到您的调用方法。

4)您的调用方法将 215 显示为字符串。

这有帮助吗?

于 2012-12-03T16:42:51.617 回答
1

以下是您的代码的三个版本,用于演示正在发生的事情,以及我认为您真正要问的内容:

原来的:

private void button1_Click(object sender, EventArgs e)
{
    // Set c to 100
    int c=100;

    // Print the result of Count, which (see below) is ALWAYS 115.
    MessageBox.Show(Count(c).ToString());
}

public int Count(int a)
{
    // Set a to 115 (there is no add here, I think this is a typo)
    a=115;
    // Return a, which is ALWAYS 115.
    return a;
}

我认为你的意思是:

private void button1_Click(object sender, EventArgs e)
{
    // Set c to 100
    int c=100;

    // Print the result of Count, which will be 215.
    MessageBox.Show(Count(c).ToString());
}

public int Count(int a)
{
    // Add 115 to a.
    a+=115;

    // Return the result (if a == 100, this will return 215)
    return a;
}

我认为你得到的是:

private void button1_Click(object sender, EventArgs e)
{
    // Set c to 100
    int c=100;

    // Call the count function, passing in a reference for c.
    Count(ref c);

    // Print the value of c. This will be 215 because the Count function set c to a new value.
    MessageBox.Show(c.ToString());
}

public void Count(ref int a)
{
    a+=115;
}

在最后一种情况下,我将函数更改为public void Count(ref int a). 修饰符允许函数使用ref对另一个变量的引用来分配新值。通常,参数是“按值”,其中传入变量值的副本。

请注意,在这种情况下,首选第二个版本。引用参数只应在真正需要时使用,而不是作为简单返回值的替代品。

于 2012-12-03T16:43:49.883 回答
0

您的Count()方法只是丢弃它传递的值并返回115。如果您替换a=115a=a+115并通过它100,它将返回 215。这一切都符合预期。

a=a+115意思是“取 的值a,加上 115,然后将总数分配给a。”

这一切都按预期工作。

于 2012-12-03T16:30:39.537 回答
-1

看起来您想知道变量如何a转换为您的消息框。这是因为变量a在您的count()函数中。更改其值会更改 count 函数的结果。并且由于您的消息框从 获取其值count,因此您拥有它。

于 2012-12-03T16:29:45.503 回答