函数的调用(初学者)

1、一般形式:函数名(实参表列)

若调用无参函数,则“实参表列”可以没有,但括弧不能省略。

若实参表列包含多个实参,则各参数间用逗号隔开,实参与形参个数应相等,类型应匹配。实参与形参按顺序对应,一一传递数据。

注:若实参表列包含多个实参,对实参求值的顺序不是确定的,有的系统按自左至右顺序求实参的值,有的系统按自右向左。

程序:(判断系统是自左向右还是自右向左)

#include <stdafx.h>
#include<stdio.h>

void main()
{
    int f(int a,int b);/*函数声明*/
    int i=2,p;
    p=f(i,++i); /*函数调用*/
    printf("%d\n",p);
}
int f(int a,int b)
{
    int c;
    if(a>b)
    {
        c=1;
    }
    else if(a==b)
    {
        c=0;
    }
    else
    {
        c=-1;
    }
    return(c);
}

若自左向右则相当于f(2,3),若自右向左则相当于f(3,3)。

2、函数的调用方式

按函数在程序中出现的位置来分,可以有以下三种函数调用方式:

(1)函数语句

把函数调用作为一个语句,不要求函数带回值,只要求函数完成一定的操作。

(2)函数表达式

函数出现在一个表达式中,这种表达式称为函数表达式。这时要求函数带回一个确定的值以参加表达式的运算。例如:c=2*max(a,b);

(3)函数参数

函数调用作为一个函数的实参。

例:m=max(a,max(b,c));

其中max(b,c)是一次函数调用,它的值作为max另一次调用的实参。m的值是a,b,c三者中的最大值。

3、被调用函数的声明和函数原型

(1)被调用的函数必须是已经存在的函数。

(2)若使用库函数,还应在本文件开头用#include命令将调用有关库函数时所需要用到的信息“包含”到本文件中来。

(3)若使用用户自己定义的函数,而该函数的位置在调用它的函数(即主调函数)的后面,应在主调函数中对被调函数作声明。

4、关键词

声明:声明一词原为delaration,过去译为“说明”。

声明的作用:把函数名和函数参数的个数,以及参数类型等信息通知编译系统,以便在遇到函数调用时,编译系统能正确识别函数并检查调用是否合法。(不占内存)

函数的定义:是指对函数功能的确立,是一个完整的,独立的函数单位(占内存)。

注:区分函数的声明与定义。

例:

#include <stdafx.h>
#include<stdio.h>

void main()
{
    float add(float x,float y);
    float a,b,c;
    scanf("%f,%f",&a,&b);
    c=add(a,b);
    printf("sum is %f\n",c);
}

float add(float x,float y)
{
    float z;
    z=x+y;
    return z;
}

注:若被调用函数定义出现在主调函数之前,可以不必加以声明,因为编译器已先知道了已定义函数的有关情况,会根据函数首部提供的有关信息对函数的调用作正确性检查。

原文地址:https://www.cnblogs.com/lvfengkun/p/10335792.html

时间: 2024-10-19 04:41:16

函数的调用(初学者)的相关文章

深入剖析php执行原理(4):函数的调用

本章开始研究php中函数的调用和执行,先来看函数调用语句是如何被编译的. 我们前面的章节弄明白了函数体会被编译生成哪些zend_op指令,本章会研究函数调用语句会生成哪些zend_op指,等后面的章节再根据这些op指令,来剖析php运行时的细节. 源码依然取自php5.3.29. 函数调用 回顾之前用的php代码示例: <?php function foo($arg1) { print($arg1); } $bar = 'hello php'; foo($bar); 在函数编译一章里已经分析过,

javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量

定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta chaset="UTF-8"> 5 <title></title> 6 </head> 7 <body

MFC浅析(7) CWnd类虚函数的调用时机、缺省实现

CWnd类虚函数的调用时机.缺省实现 FMD(http://www.fmdstudio.net) 1. Create 2. PreCreateWindow 3. PreSubclassWindow 4. PreTranslateMessage 5. WindowProc 6. OnCommand 7. OnNotify 8. OnChildNotify 9. DefWindowProc 10. DestroyWindow 11. PostNcDestroy CWnd作为MFC中最基本的与窗口打交

函数的调用优化

函数的调用优化 在类中有四大成员函数,构造函数,拷贝构造函数,赋值函数和析构函数,在类外进行实例化时,若调用函数的方法不当则会产生时间和空间的浪费. 以下,将用几个小栗子来说明函数的调用优化的常见办法 类: class Test { public: Test(int d = 0) : _data(d) { cout << "Create Test Object:"<<this << endl; } Test(const Test&x) :_d

Entity Framework 6 Recipes 2nd Edition(11-4)译 -&gt; 在”模型定义”函数里调用另一个”模型定义”函数

11-4.在”模型定义”函数里调用另一个”模型定义”函数 问题 想要用一个”模型定义”函数去实现另一个”模型定义”函数 解决方案 假设我们已有一个公司合伙人关系连同它们的结构模型,如Figure 11-4所示: Figure 11-4. A model representing the associate types in a company together with the reporting association 在我们的虚拟的公司里, , team members被一个team lea

回调函数中调用类中的非静态成员变量或非静态成员函数

有关这方面的问题,首先说一点: 回调函数必须是静态成员函数或者全局函数来实现回调函数,大概原因是普通的C++成员函数都隐含了一个函数参数,即this指针,C++通过传递this指针给成员函数从而实现函数可以访问类的特定对象的数据成员.由于this指针的原因,使得一个普通成员函数作为回调函数时就会因为隐含的this指针问题使得函数参数个数不匹配,从而导致回调函数编译失败. 基于上面的理论,如何在类中封装回调函数呢? 回调函数只能是全局函数或者静态成员函数,但是由于全局函数会破坏封装性,所以只能用静

关于编译型语言函数的调用(三)

接上文:http://blog.csdn.net/prsniper/article/details/40653235 类delete就不说了,有兴趣的朋友自己跟踪看看吧,提示一下:析构函数也有参数和返回值. 下面我们看下裸函数,裸函数从执行效率上是可以与汇编语言媲美的,然而它不太好逆过来说,我们就顺着说吧 前面说得构造函数的临时堆栈,恢复寄存器等等,有人给了个名称叫prolog和epilog 而裸函数并没有自动编译这些部分,其实说白了,裸函数相当于汇编语言中的一个标签,其调用受前面几种约定约束

C++之类的成员函数的调用 vs. 普通函数的调用

首先请看下面的语句: Point3d obj; Point3d *ptr = &obj; 当使用上述指针或者对象调用成员函数Func()时,会有: obj.Func(); ptr->Func(); 上述调用的背后到底完成了一些什么呢? 假设Func函数的定义如下: Point3d Point3d::Func() const { Float a = getA(); Point3d ret; ret._x = _x/a; ret._y = _y/a; ret._z = _z/a; return

C++中拷贝构造函数和赋值函数被调用的时机

一.拷贝构造函数被调用的时机: 1. 当用类的一个对象去初始化该类的另一个对象(或引用)时系统自动调用拷贝构造函数实现拷贝赋值. 2. 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数. 3. 当函数的返回值是类对象时,系统自动调用拷贝构造函数. 二.赋值函数被调用的时机: 当用一个对象赋值给另一个对象时 注意一.二中初始化和赋值的区别 C++中拷贝构造函数和赋值函数被调用的时机,布布扣,bubuko.com