A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邱蚓 中级黑马   /  2014-6-18 23:36  /  1334 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#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个却不正常呢

5 个回复

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

主函数中a没有被初始化,结果不可预料。你传递的只是a的值,如果你想在调用m函数后更改a的值,可以把m的形参改为int *,并且在传递时取a的地址
回复 使用道具 举报
楼上都说的很对。

第一段代码块已经完成输出操作,语句已结束,因此第一段代码内的数值无法再调用。
主函数那块代码必须自己再定义a的值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马