基本数据类型的传值问题

基本数据类型的传值问题

main(){
int m = 12;
int n = 34;
printf("%d%d",m++,++n);
printf("%d%d",n++,++m);
}

为什么输出结果是12353514

如果int只是值传递,不影响m,n,那执行第二句输出语句时传入的还是m=12,n=34,结果为什么不是12353413


请问我是哪里理解错了?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小小 2021-06-28 19:12:23

同学你好,值传递是发生在调用方法时的,所以此处不是值传递,对m、n是有影响的。

当++在数据前,自身的值加一后再运算,++在数据后,自身的值先运算再加一。
第一个输出语句中,m++,++在后,自身的值先运算所以输出的是12,输出后m的值后m加1为13;
第一个输出语句中,++n,++在前,自身的值先自增1在运算,所以输出的是n增加1后的值为35。
第一个输出语句执行结束后m=13,n=35。
第二个输出语句,n++,++在后,自身的值先运算所以输出的是35,
第二个输出语句,++m,++在前,自身的值先自增1在运算,所以输出的是m增加1后的值为14。
所以最终输出结果为:12 35 35 14。
​祝学习愉快~

  • 提问者 慕粉1908354706 #1

    老师,可以解释下什么是调用方法时吗?printf()不是方法吗?

    2021-06-28 19:15:57
  • 好帮手慕小小 回复 提问者 慕粉1908354706 #2

    同学你好,值传递指的是数据值的传递,传递之后数据互不相关。如下是在调用方法时发生值传递的案例:

    当调用自定义方法test1时将变量a的值传递进方法,传递后,主方法中变量a与方法参数a互不相关。所以如下代码的运行结果为:test1方法中a=5、main方法中a=3

    public class Test {
        public void test1(int a){
            a =5;
            System.out.println("test1方法中a="+a);
        }
        public static void main(String[] args) {
            Test t = new Test();
            int a = 3;
            t.test1(a);
            System.out.println("main方法中a="+a);
        }
    }

    java语言中无printf()方法。main(){}、printf("%d%d",n++,++m);的书写是C语言的格式,但在java语法中是错误的,建议同学书写时注意区分。正确书写如下:

    public static void main(String[] args) {
    int m = 12;
    int n = 34;
    System.out.println((m++)+","+(++n));
    System.out.println((n++)+","+(++m));
    ​}

    祝学习愉快~

    2021-06-29 10:50:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师