黑马程序员技术交流社区

标题: 为什么结果会发生变化? [打印本页]

作者: 邱蚓    时间: 2014-6-18 23:36
标题: 为什么结果会发生变化?
#include<stdio.h>
void m(int a)
{
        int j=10;
        a=j+3;
                printf("a = %d",a);
}

int main()
{
        int a;
        m(a);
        printf("a = %d",a);
}
调用完函数之后,就没什么操作了啊。为什么第一个a等于13,第2个却不正常呢

作者: huangqiwa    时间: 2014-6-19 00:22
楼主你好,
首先,楼主定义了一个int a
但是a没有初始化就直接传递给函数了,a的值是不确定的
当第一个a的时候,由于做了一个赋值操作,在函数内部打印出来是13
但是由于楼主用的值传递,所以a的值本身是没有变化的,所以第二句代码的a实际上值还是不确定的,所以是错的!
作者: haohaoxuexi    时间: 2014-6-19 00:27
第二个a没有赋值
作者: chain    时间: 2014-6-19 01:57
因为你main函数里面的变量a没有初始化就拿来使用了,由于不是全局变量,所以是乱七八糟的数值,如果是全局变量,默认为0
作者: zys456465111    时间: 2014-6-19 07:29
本帖最后由 zys456465111 于 2014-6-19 07:30 编辑

主函数中a没有被初始化,结果不可预料。你传递的只是a的值,如果你想在调用m函数后更改a的值,可以把m的形参改为int *,并且在传递时取a的地址
作者: Emy♪    时间: 2014-6-19 09:37
楼上都说的很对。

第一段代码块已经完成输出操作,语句已结束,因此第一段代码内的数值无法再调用。
主函数那块代码必须自己再定义a的值。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2