一个关于函数重载的问题,初学者

来源:百度知道 编辑:UC知道 时间:2024/06/20 23:55:41
#inculde<iostream>
int x=1;
void func(int);
void main()
{fun c(x);cout<<"x="<<x<<endl;}
void fun c(int x)
{x=3;}
这题输出答案是1,为什么不是3?
void func(int);是什么意思?

这是一个最最基本的题目。首先,我要说的是,函数是具有黑盒性质的。
什么是黑盒性质呢?就是说函数如果是传递参数的方式是传值的话(可以近似理解为,参数不是引用,也不是指针的情况),这时候传入函数的值会被拷贝一份,赋给为了函数而特别开辟的变量。而在函数中的变量的改变,就与函数外的参数没有关系了。

拿你那个程序来说明一下。首先一个函数要想在main函数中使用,就要声明或者定义这个函数。void func(int);是这个函数的声明。后面的func函数定义虽然在main后面,但是由于在main之前声明了,就意味着告诉编译器,有这么个函数。所以不会报错了。在main函数中执行了func(x),你想想,如果是func(5)的话,那变量怎么改变呢?5可不是一个变量,但是绝对是一个合法的函数调用。所以这种传值方式是不会改变变量的。

关于指针和引用的具体问题,我觉得你还是看看书吧,毕竟c语言的灵魂是指针,不是可以一句两句说清楚的。

对C语言不熟悉

要输出是3的话,你可以用指针来传递..

void func(int); 在C里面是声明函数的语句参数中只要知道变量类型,不需要变量名

你写这段的代码目的是想用 fun(int)函数修改 变量x 的值。
你在调用fun(x)时,把 x 作为参数 数传入,其实你并没有传入 x ,而是x的一个副本,变量x 和变量x的副本在内存中不在同一块区域,fun(x)调用结束后,x的副本就消失了(副本的内存区域释放)这种传值调用方式不能达到目的(修改 x 的值)。

要想达到目的(修改x 的值就要传入 x 的地址。这样写代码:
#inculde<iostream>
int x=1;
void func(int*);
void main()
{fun c(&x);cout<<"x="<<x<<endl;}
void fun c(int *x)
{*x=3;}

这个很简单的问题啊。

void func(int);这个是函数的声明