美文网首页
C初级学习——12.19

C初级学习——12.19

作者: 赋闲 | 来源:发表于2016-12-19 21:20 被阅读0次

    问题:
    分支函数如何return:回多个值
    答:1.直接调用下一个函数,2.全局变量,3.文件,4.链表和容器,5.存入共享内存。

    函数

    基本概念:把代码中功能相似并且独立的代码单独封装成一个独立的整体;
    避免重复写代码,函数封装

    优点:
    提高简洁性,提高开发效率
    提高代码的重用性
    有利于程序的维护

    1。分类
    分类一:

    系统函数:
    由C标准库(系统)提供的函数;如printf,scanf,
    用系统函数时,只需将对应的头文件包含进来,
    编译要加上-lmath
    #include<stdio.h>
    #include<math.h>
    #include<time.h>
    #include<stdlib.h>
    int main ()
    {
    int = i;
    //平方根函数
    int sum = sqrt(i);//若报错加 -lm

            //幂函数
            int a= pow(2,16);
            printf("2^16=%d\n",a);
    
            char ch='q';    
            //小写转大写     
            a=toupper(ch);
            //大写转小写
            char ch1=T;
            a=chtolower(ch1);
    
            //随机产生10个0-100之间的随机数
            srand(time(0));//srand(time(NULL));
            int i=0;
            int sum = 0;
            for(i=0;i<10;i++)
            {
            sum = rand()%100;
            printf(%4d,sum);
            }
    
            return 0;
            }
    

    自定义函数:
    用户根据自己需要定义的函数

    分类二:
    有返回值的函数:
    函数调用结束后,会返回一个数值给主调函数;
    echo $?//查看上一个函数的返回值
    无返回值的函数:
    函数结束后,无返回值;一般定义为void类型,(return ;)

    分类三:
    有参函数:
    函数名后( )有参数,实参传给形参;参数数目任意;
    int text(int a)
    无参函数:

    2。函数的基本定义:
    无参函数的定义:
    DataType FunctionName()//括号不可省
    {
    //函数体
    //可执行语句
    return ;
    }
    有参函数的定义:
    DataType FunctionName(Type arg1,Type arg2)
    //参数列表可以有多个,参数的类型可以任意
    {
    //函数体
    return
    }

    注意:
    3。函数的声明,函数的调用,函数的定义
    函数的定义:
    DataType FunctionName(参数列表)
    {
    //函数体
    //可执行语句
    }
    函数的声明:
    DataType FunctionName(参数列表);
    注:声明时参数列表一定要和定义时的参数列表一致!!!
    放在函数被调用之前的任意位置(如果该函数体的定义位于调用函数上面就不用写声明,否则就一定要写声明)
    函数的调用:
    FunctionName(value);//注意有分号
    value:数值
    注:函数调用实参的值类型,一定要和函数定义的形式参数一致!!
    实参:
    实际参数,即具体的数值
    形参:
    形式参数,形参的定义和普通变量的定义毫无区别;
    形参在发生调用时分配空间;
    在发生函数调用时,系统会默认将实参值赋给形参,
    实参的个数和类型要和形参一致,实参用在函数调用处
    两个函数之间不允许相互调用
    函数之间没有优先级问题,函数之间是等价,平行关系

    void swap_addr(int *pa,int *pb)
    {
    //传址
    int temp=*pa;
    *pa=*pb;
    *pb=temp;
    return ;
    }
    int main()
    {
    int a=0;
    int b=0;
    printf("input\n");
    scanf("%d,%d",&a,&b);
    printf("1=%d,%d\n",a,b);
    swap_addr(&a,&b);
    printf("3=%d,%d\n",a,b);
    return ;
    }
    

    3.函数的返回值
    无返回值的类型函数类型:void
    这个类型决定了函数的返回值的类型,若是 int 则返回值为 int 型,
    接受函数 text() 的返回值;要用相同类型的变量接受 int ret = text();
    若返回值在后面的代码中无用时,则无需接受返回值
    若不是 void 类型的函数,则必须要有 return
    有返回值的函数类型

    return 的作用:
    函数遇到 return ,则结束,后面的语句不执行

    关键字:
    变量分局部变量和全局变量

    局部变量:在函数中定义的变量,在函数结束时局部变量会自动释放内存,因此不同的函数中可以使用相同的变量名,
    全局变量:在函数体之外定义的变量,其作用域从定义处开始到本文件结束,在未定义前不可使用,

    变量分静态和动态
    静态变量和动态全局变量:无显式初始化时默认初始化值为0,
    动态局部变量:无显式初始化时默认初始化值为随机值,

    静态局部变量:
    作用域为当前函数,从定义位置,到其所在的{}的结束位置。静态局部变量不会被再次初始化,而是沿用上次函数退出时的值。

    静态全局变量:
    生命周期为从程序运行到程序退出,即贯穿整个运行时间,当下次函数调用时,不会被再次初始化。且只限本文件使用。

    若全局变量与局部变量重名,则自动屏蔽全局变量,
    auto : 声明变量是动态局部变量,可以省略,如 auto int a = 5;
    static : 声明变量是静态变量,分全局和局部两种,修饰局部变量,全局变量和函数
    extern:声明为外部变量:extern int sum;
    修饰函数:extern int text();
    声明变量或函数在外部已经定义;
    register:
    寄存器变量:直接存放在寄存器中;
    CPU寄存器数目有限,不可定义多个寄存器变量
    const:只读变量
    常量,不可更改其值
    const int num = 5;//int const num = 5;//变量值不可更改
    const int p;//int const p;//指针变量的值不可改
    int
    const p;//指针地址不可更改
    const int
    const p;//值和址都不可更改

    extern int sum//编译时和有sum的外部文件一起编译
    //调用外部变量sum
    //另一个文件要声明本文件的调用函数( extern int text() )
    //不可以重新赋值和定义
    int text()
    {
    sum +=8;
    printf("sum=%d\n",sum);
    return ;
    }

    6.。函数的传参
    传值
    传址

    7.。指针函数和函数指针
    指针函数:
    int text();返回的是一个地址
    函数指针:
    int (
    pa)():指向函数的地址,返回的是函数的值

    //传参
    void swap(int a,int b)
    {
    //传值
    int temp=a;
    a=b;
    b=temp;
    printf("0=%d,%d\n",a,b);
    return ;
    }
    
    void swap_addr(int *pa,int *pb)
    {
    //传址
    int temp=*pa;
    *pa=*pb;
    *pb=temp;
    return ;
    }
    int main()
    {
    int a=0;
    int b=0;
    printf("input\n");
    scanf("%d,%d",&a,&b);
    printf("1=%d,%d\n",a,b);
    swap(a,b);
    printf("2=%d,%d\n",a,b);
    swap_addr(&a,&b);
    printf("3=%d,%d\n",a,b);
    return ;
    }
    

    相关文章

      网友评论

          本文标题:C初级学习——12.19

          本文链接:https://www.haomeiwen.com/subject/rlwtvttx.html