c语言调用函数
1. c语言怎么使用调用函数
例子代码如下所示:
int Add(int x, int y) { int sum;
sum = x + y; return sum;
}void main() { int z;
z = Add(1, 2); printf("z=%d
", z);
}
下面分析一下 Add函数的调用过程。
首先断点在z = Add(1, 2);处, 反汇编如下所示:
int z;
z = Add(1, 2);002C141E 6A 02 push 2 002C1420 6A 01 push 1 002C1422 E8 60 FC FF FF call 002C1087
002C1427 83 C4 08 add esp,8 002C142A 89 45 F8 mov dword ptr [ebp-8],eax
首先压入参数1和2:
002C141E 6A 02 push 2 002C1420 6A 01 push 1
通过观察ESP可以看到参数从右到左依次入栈,ESP往低内存方向移动8字节:
ESP=0025FCCC
...0x0025FCAA 00 00 78 4c 33 00 bc fc 25 00 a9 fe aa 0f 78 4c 33 00 c8 fc 25 00 3d 5a b2 0f *** 01 00 00 00 02 00 00 00 ***0x0025FCCC 00 00 00 00
2. C语言中怎样调用函数(举个例子)
我想C语言中调用函数分以下内几部:
1)根据调用的函数名找到函数入口;
2)在栈中审请调用函数中的参数及函数体内定义的变量的内存空间
3)函数执行完后,释放函数在栈中的审请的参数和变量的空间,最后返回值(如果有的话)
3. c语言中怎么调用函数谢谢
C语言中,函数调用的一般形式为:函数名(实际参数表)对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
#include<stdio.h>
int fun(int x, int y); // 函数声明,如果函数写在被调用处之前,可以不用声明
void main()
{
int a=1, b=2, c;
c = fun(a, b); // 函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值
}
// 自定义函数fun
int fun(int x, int y) // 函数首部
{ // {}中的语言为函数体
return x>y ? x : y; // 返回x和y中较大的一个数
}
函数实参
函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。例如: printf("%d",max(x,y)); 即是把max调用的返回值又作为printf函数的实参来使用的。在函数调用中还应该注意的一个问题是求值顺序的问题。
所谓求值顺序是指对实参表中各量是自左至右使用呢,还是自右至左使用。对此,各系统的规定不一定相同。介绍printf 函数时已提到过,这里从函数调用的角度再强调一下。
以上内容参考:网络-函数调用
4. c语言调用函数
修改后可以运行的程序:
#include <stdio.h>
#include<conio.h>
int sum(int x,int y)
{ int z;
z=x+y;
printf("z=%d",z);
return z;
}
void main()
{ int a,b,s;
printf("Input a and b:");
scanf("%d,%d",&a,&b);
s=sum(a,b);
getch();
}
改正的错误:
1.printf("z=%d",z);无%d,则不能输出z值
2.scanf("%d",&a); &表示输入到a
3.用到getch();时需加头文件#include<conio.h>
4.无返回值函数需加void
5. C语言调用函数问题
你意思用全局变量?
还有其他方法啊
你这个算一种
还有返回值的方法
比如
main中调用
intfun(inta,intb)
{
returna+b;
}
main()
{
inta=1,b=2,c=0;
c=fun(a,b);
//此时输出c就是ab的计算结果3了
}
那么可以在main函数中用变量来接收这个计算结果
和指针操作的方法
voidfun(int*a)
{
*a=*a+1;
}
main()
{
inta=1;
fun(a);
//此时a就是a+1的值了
}
都可以让子函数改变主函数里的变量而不用搞全局变量
6. C语言如何调用函数
C语言中,函数调用的一般形式为:
函数名(实际参数表)
对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
#include<stdio.h>
intfun(intx,inty);//函数声明,如果函数写在被调用处之前,可以不用声明
voidmain()
{
inta=1,b=2,c;
c=fun(a,b);//函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值
}
//自定义函数fun
intfun(intx,inty)//函数首部
{//{}中的语言为函数体
returnx>y?x:y;//返回x和y中较大的一个数
}
(6)c语言调用函数扩展阅读
C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。
这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。其关系可表示如图。
图表示了两层嵌套的情形。其执行过程是:执行main函数中调用a函数的语句时,即转去执行a函数,在a函数中调用b 函数时,又转去执行b函数,b函数执行完毕返回a函数的断点继续执行,a函数执行完毕返回main函数的断点继续执行。
7. C语言函数调用的三种方式并分别举一例。
1、值传递,创建变量x和y,x的值等于a的值,y的值等于b的值
void Exchg1(int x, int y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf(“x=%d,y=%d/n”,x,y)
}
void main()
{
int a=4,b=6;
Exchg1 (a,b) ;
printf(“a=%d,b=%d/n”,a,b)
}
2、地址传递,相当于建立了px和py两个指向整型的指针,其值分别为a和b的地址
Exchg2(int *px, int *py)
{
int tmp=*px;
*px=*py;
*py=tmp;
print(“*px=%d,*py=%d/n”,*px,*py);
}
main()
{
int a=4;
int b=6;
Exchg2(&a,&b);
Print(“a=%d,b=%d/n”, a, b);
}
3、引用传递,x和y直接引用a和b,对a和b操作,相当于给a、b起了别名x、y
Exchg2(int &x, int &y)
{
int tmp=x;
x=y;
y=tmp;
print(“x=%d,y=%d/n”,x,y);
}
main()
{
int a=4;
int b=6;
Exchg2(a,b);
Print(“a=%d,b=%d/n”, a, b);
}
(7)c语言调用函数扩展阅读:
printf用法:
printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。
其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。
比如:
int a=1234;
printf("a=%d ",a);
输出结果为a=1234。
8. c语言如何实现函数的调用
函数名加(实参),这样吧...举个例子你看一下...
int add(int x,int y)
{
int x,y;
int z;
z=x+y;
return z;
}//定义一个z=x+y的函数
int main()//主函数
{
int a=10,b=20;
int m;
m=add(a,b);//这句就是函数的调用...调用了add函数
printf("%d",m);
return m;
}
理解了没...还没的话...仔细看下教材...这个问题很容易解决的...