
2006-5-14 20:42
pop89099999
为什么函数不能直接调用另一函数???
为什么函数不能直接调用另一函数???
比如:
int AAA(int a)
{
return a-2;
}
int BBB(int c) 第一种情况
{ int a;
return c+AAA(a);
}
-------------------------------------------
int AAA(int a)
{
return a-2;
}
int a; 第二种情况
int BBB(int c)
{
return c+AAA(a);
}
系统告之:第一种情况:参数a没有使用。并且得不到“c+AAA(a)”的真实值。
第二种情况:虽然没有错误和警告,但也得不到“c+AAA(a)”的真实值。
请高手帮忙。
2006-5-14 21:25
祥子
你的实参都初始化了吗?
2006-5-16 00:34
pop89099999
本人在此说清楚问题,本问题纯粹是:用户定义了两个调用函数,分别是AAA(a)与BBB(c)。在定义的过程中,先定义了AAA(a),后面定义BBB(c)的过程中怎么调用AAA(a)(也就是在BBB(c)的函数体中怎么调用AAA(a)).请各位高手指导。编译系统提出的错误只是表面问题,并不是根本问题
2006-5-16 10:13
thingi
你能把你的调用过程写出来,在什么编译器执行?
会提示你a没初始化,是因为不管第一还是第二种,你a始终没有赋值,在有的编译器会有默认值,那样编译不会出错,但结果不可预料;但有的编译器要求所有定义变量必须初始化,否则编译不能通过。(我在vc6.0作过测试,你那函数调用没什么问题,问题在于系统给默认值,导致结果不可预料。)
至于你的跟贴:函数调用就是那样子,你的写法并没有问题,也就是BBB(c)函数调用AAA(a)是完全可以的!!
2006-5-16 10:18
thingi
int AAA(int a)
{
return a-2;
}
int BBB(int c) 第一种情况
{ int a;
a=3;//多这个你看看
return c+AAA(a);
}
2006-5-16 14:20
祥子
函数原型是没有问题的。
估计问题出在编译器。
C系列的就不是很清楚了,因为不同的C,版本不同,对变量的初始化也不相同。
Delphi里的整型变量都要初始化,不然就是一个随机数。
2006-5-16 22:54
pop89099999
本人通过thingi高手的赋值情况下的调用函数的提示,得出输入语句下的调用函数的程序供大家参考。同时也感谢thingi高手的指导。
程序如下:
#include <iostream>
using namespace std;
int aaa(int a)
{
return a;
}
int bbb(int b)
{ int a;
cin>>a;
return b+aaa(a);
}
int main( )
{
int b;
cin>>b;
cout<<bbb(b)<<endl;
return 0;
}
版主说的内容不知何意,请教一下。
2006-5-16 23:46
祥子
我的意思就是你传入函数的实参没有初始化。
虽然有些编译器会自动把INT型的变量初始化为0,但是有的不会。
理由我在这里简单地说明一下:
INT型一般来说是32位,也就是在内存中分配4个字节的空间给变量。这就是预留。
有些编译器会把这4个字节的内容清除为:00 00
但是有的编译器不会清除,也就是内存里的值是多少就是多少(00 00 ~ FF FF)之间的一个数。
所以,如果编译器不自动初始化的话,你想想你引用一个未初始化的变量,会带来什么后果?
要养成良好的习惯,对变量赋初值。
2006-5-16 23:49
祥子
int aaa(int a)
{
return a;
}
你的这个函数没有任何的作用,返回值没用对形参进行任何修改,调用此函数相当于直接使用变量
2006-5-17 18:16
pop89099999
谢谢祥子版主的说明
2006-5-25 08:26
workout
第一种情况下,变量a没有赋值,所以在定义BBB时,无法调用AAA。
第二种情况,定义的a是一个全局变量,而在 return c+AAA(a);时,注意!这是定义函数,而不是主程序中的调用,这个a应该是一个局部变量,优先级高于全局变量
我认为你可以这样修改
int BBB(int a,int c)
必须传递两个参数
2006-5-25 12:27
祥子
[quote][b]引用第10楼[i]workout[/i]于[i]2006-05-25 08:26[/i]发表的“”[/b]:
第一种情况下,变量a没有赋值,所以在定义BBB时,无法调用AAA。
第二种情况,定义的a是一个全局变量,而在 return c+AAA(a);时,注意!这是定义函数,而不是主程序中的调用,这个a应该是一个局部变量,优先级高于全局变量
我认为你可以这样修改
int BBB(int a,int c)
必须传递两个参数[/quote]
第一种情况:
没有赋值不代表不可以调用,因为在内存中他已经有值,只不过有可能是一个未知的值。
第二种情况:
也是同样的的原因,并不是局部变量与全局变量的原因。局部变量只有在与全局变量同名的时候,才会有优先级高于全局变量
2006-5-25 22:46
pop89099999
祥子大哥说的好,顶啊
2006-6-3 18:24
pixiou
int AAA(int a)
{
return a-2;
}
int BBB(int c) 第一种情况
{ int a;
return c+AAA(a);
}
//////////////////////////////////////我觉得应该是:
int AAA(int a)
{
return a-2;
}
int BBB(int c) 第一种情况
{ int a;int b;
b = AAA(a);
c= c + b;
return c;
}
2006-6-3 22:29
祥子
[quote][b]引用第13楼[i]pixiou[/i]于[i]2006-06-03 18:24[/i]发表的“”[/b]:
int AAA(int a)
{
return a-2;
}
int BBB(int c) 第一种情况
.......[/quote]
说了很多次了,不同的编译器。对变量的初始化不相同。
页:
[1]
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.