二:C语言复习基础--函数

一:函数的声明和定义

//1.函数声明(参数变量可省略)
返回值类型 函数名(参数类型 参数,参数类型 参数,...);

//2.函数定义
返回值类型  函数名(参数类型 参数,参数类型 参数,...)
{
    语句;
    return 返回值;
}

//3.参数类型存在隐式转换
int fun(int c,int b)
{
    printf("%d,%d
",c,b);
    double a=100.09;
    return a;
}

int main()
{
    double a=fun(1.9,2.3);
    printf("%f",a);
}

二:main函数的始终

1.main函数的三种形式

//无参
int main();

//参数个数和参数列表
int main(int argc,char *argv[]);

//参数个数和参数列表、环境变量列表
int main(int argc,char *argv[],char *envp[]);

2.main函数原理

C90标准中,规定了执行环境,对于没有操作系统的环境,入口地址是什么都可以。对于有操作系统的环境中,链接器会把main函数和另外的启动程序链接,而启动程序会引用你写的main函数

#include
<stdio.h> int print() { printf("helloworld"); return 0; } //编译参数:gcc test.c -e print nostartfiles //运行结果:helloworld

三:可变参数与printf和scanf函数

1.函数的可变参数

//stdarg.h提供va-list数据类型和三个宏(va-start、va-arg和va-end)。实现函数可变参数:printf和scanf函数。

#include<stdarg.h>
#include<stdio.h>

int my_print(const char *format,...)
{
    char c=0;
    int value_num=0;
    
    va_list vp;
    va_start(vp,format);
    
    while(*format)
    {
        c=*format;
        switch(c)
        {
            case '%':
            {
                char cc=*(++format);
                switch(cc)
                {
                    case 'd':
                    {
                        printf("%d",va_arg(vp,int));
                        value_num++;
                        break;
                    }
                    case 'f':
                    {
                        printf("%f",va_arg(vp,float));
                        value_num++;
                        break;
                    }
                    case 'l':
                    {
                        char *temp=format;
                        char ccs=*(++temp);
                        if(ccs=='f')
                        {
                            printf("%lf",va_arg(vp,double));
                            value_num++;
                        }
                        if(ccs=='d')
                        {
                            printf("%ld",va_arg(vp,long long int));
                            value_num++;
                        }
                        break;
                    }
                    case 'c':
                    {
                        putchar(va_arg(vp,char));
                        value_num++;
                        break;
                    }
                    case 's':
                    {
                        printf("%s",va_arg(vp,char*));
                        value_num++;
                        break;
                    }
                    default:
                    {
                        break;
                    }
                }
            }
            default:
            {
                printf("%c",c);
                break;
            }
        }
        format++;
    }
    va_end(vp);
}

2.scanf函数和printf函数使用详解

1.printf函数使用
int printf(const char *format,...);

//返回值:正确输出的字符总数,错误则返回负值,且输入输出流错误标志(ferror)
//调用格式:printf("格式化字符串",输出列表); //格式化字符串:转义字符、字符串常量、格式控制字符串
//%[flags][width][.prec][length]type
//type:整形(%d),无符号8进制(%o),无符号10进制(%u),无符号16进制(%X),百分号(%%),单精度(%f),双精度(%lf),此前输出的字符数(%n),打印error内容(%m) //flags:左对齐(-),输出符号(+),(正值为空格负值加上负号)(空格),输出的前面补0(0) //printf实现是行缓冲,下面情况时会刷新缓冲区: //1.缓冲区填满 //2.遇到回车' '或换行' ' //3.调用fflush手动刷新缓冲区 //4.调用scanf要从输入缓冲区中读取数据,所以也会将输出缓冲区内容刷新
2.scanf函数使用
原文地址:https://www.cnblogs.com/running-world/p/11572874.html