回 帖 发 新 帖 刷新版面

主题:[讨论]有一个程序没搞懂

using System;
class Test {
    static void F(int p) {
        Console.WriteLine("p = {0}", p);
        [u]p++;[/u]
    }
    static void Main() {
        int a = 1;
        Console.WriteLine("pre: a = {0}", a);
        F(a);
        Console.WriteLine("post: a = {0}", a);
    }
}
为什么这段程序算下来是
pre: a = 1
p = 1
[u]post: a = 1[/u]这里为什么是1我搞不懂
我把上面的那个 p++该成++p答案还是那个啊 为什么谁能告诉我啊 谢谢啊

回复列表 (共4个回复)

沙发

值参数原值不受影响

板凳

F(int p) 这个方法内修改变量的p的值不会反映到main()方法内,这是因为int型是一种值类型,将变量传递给F()方法时,只是传递这个变量的副本,只有是引用类型的变量,如(object,类,数组,委托,接口),string 这个引用类型除外,因为string也是按值传递的。所以,是值类型就不会反映到main()方法内.你所说的p++和++p并不会改变什么,这是因为p执行的时候是在Console.WriteLine("p = {0}", p)输出后,你要改变p的值,只能把p++放在Console.WriteLine("p = {0}", p)之前。


using System;
class Test {
    static void F(int p) {
        p++;
        Console.WriteLine("p = {0}", p);
       
    }
    static void Main() {
        int a = 1;
        Console.WriteLine("pre: a = {0}", a);
        F(a);
        Console.WriteLine("post: a = {0}", a);
        Console.ReadLine();
    }
}

刚学完Java,也是刚学c#,说的不对请多指教.

3 楼

把a定义在外面就可以改变;
private int a = 1;

4 楼

值参数不会影响原来的,如果要影响,可以加ref.

我来回复

您尚未登录,请登录后再回复。点此登录或注册