栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

七、C语言函数定义详解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

七、C语言函数定义详解

文章目录
  • 1、函数的声明和定义
  • 2、函数的调用
  • 3、函数参数的两种传递方式
    • 1.传值调用(C语言默认传递参数方式)
    • 2.引用调用
  • 4、函数的分类
    • 1.内部函数(静态函数)
    • 2.外部函数

1、函数的声明和定义
  • 函数声明:
    • 作用:告诉编译器函数的名称,返回类型和参数
    • 格式:reture_type function_name(parameter list);
    • 在函数声明中,函数的名称并不重要,参数的类型是必须的,例如: int maxint(int, int);
    • 当一个源文件调用另一个源文件的函数时,应在文件顶部声明函数
  • 函数定义:定义函数的实际主体
2、函数的调用
  • 格式:
    • 先声明,后定义
    • 声明,定义同时进行
  • 代码实现:
    #include
    
    int max(int num1, int num2);//函数声明,num1,num2为形参,进入函数时被创建,退出函数时被销毁
    
    //声明,定义同时进行
    int max1(int num1, int num2){
        int result;
        if(num1 > num2)
            result = num1;
        else
            result = num2;
        return result;
    }
    
    int main(){
        int a = 100;
        int b = 200;
        int ret;
        int ret1;
    
        ret = max(a,b);//函数调用
        ret1 = max1(a,b);
        printf("ret=%dn",ret);
        printf("ret1=%dn",ret1);
        return 0;
    }
    
    int max(int num1, int num2){
        int result;
        if(num1 > num2)
            result = num1;
        else
            result = num2;
        return result;
    }
    
  • 运行结果:
    ret=200
    ret1=200
    
3、函数参数的两种传递方式
  • 形参在进入函数时被创建,退出函数时销毁
1.传值调用(C语言默认传递参数方式)
  • 原理:把参数的实际值复制给函数的形式参数,因而,修改函数的形式参数不会影响实际参数
  • 代码实现:
    #include
    
    void swap(int x, int y){
        int temp;
        temp = x;
        x = y;
        y = temp;
    }
    
    void main(){
        int a = 100;
        int b = 200;
        printf("交换前a=%d,b=%dn",a,b);
        swap(a,b);
        printf("交换后a=%d,b=%d",a,b);
    }
    
  • 运行结果:
    交换前a=100,b=200
    交换后a=100,b=200
    
2.引用调用
  • 原理:形参为指向实参地址的指针,当对形参的指向操作是,就相当于对实参本身的操作
  • 代码实现:
    #include
    
    void swap(int *x, int *y){//*x表示指向x的地址
        int temp;
        temp = *x; //将x的值赋值给temp
        *x = *y; //将y的值赋值给x
        *y = temp;
    }
    
    int main(){
        int a = 100;
        int b = 200;
        printf("交换前a=%d,b=%dn",a,b);
        swap(&a,&b);//&a表示指向a的指针,即变量a的地址
        printf("交换后a=%d,b=%d",a,b);
        return 0;
    }
    
  • 运行结果:
    交换前a=100,b=200
    交换后a=200,b=100
    
4、函数的分类 1.内部函数(静态函数)
  • 特点:只能被本文件内的其他函数调用,即使在不同的文件中有相同的函数名,也互不影响
  • 格式:static int max(int a, int b)
2.外部函数
  • 当一个文件引用另一个文件的函数时,需要先对该函数使用extern关键字进行声明,表明该函数为外部函数
  • 代码实现:
  1. test1.c
    #include
    static void delete_string(char str[],char ch);//内部函数声明
    
    int main(){
        extern void enter(char str[]);//对外部函数的声明
        extern void print(char str[]);
    
        char c,str[100];//字符和字符串声明
        enter(str);
        printf("请输入要删除的字符:n");
        scanf("%c",&c);
        delete_string(str,c);
        print(str);
        return 0;
    }
    
    static void delete_string(char str[],char ch){//内部函数定义
        int i,j;
        for(i=j=0;str[i] != '';i++)//遍历str,删除目标字符
            if(str[i] != ch)
                str[j++] = str[i];
        str[j] = '';//在C语言中,字符串以结束
    }
    
  2. test2.c
    #include
    
    void enter(char str[100]){
        printf("请输入字符串:n");
        fgets(str,100,stdin);
    }
    
  3. test3.c
    #include
    
    void print(char str[]){
        printf("删除后的字符串:n%s",str);
    }
    
  • 运行结果:
    d102@d102-W65KJ1-KK1:/media/d102/EPAN/Desktop/c++_ubuntu/c++_01/workspace$ gcc test1.c test2.c test3.c -o test
    d102@d102-W65KJ1-KK1:/media/d102/EPAN/Desktop/c++_ubuntu/c++_01/workspace$ ./test
    请输入字符串:
    asdasdasd
    请输入要删除的字符:
    a
    删除后的字符串:
    sdsdsd
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005242.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号