C语言基础--函数和结构体

原创 2015年12月08日 15:42:29
函数  
  
        具有特定功能的代码段叫做函数;简单地说函数就是一连串的语句组合在一起,实现某种功能,就取名代替这些语句。
      -----------------------------------------------------------------
   特点:
      1、都实现了某一种功能
      2、函数的使用可以省去重复的代码编写,大大简化程序,提高开发效率 
   ---------------------------------------
     从定义来看,函数可分为:
     1、库函数,系统提供好的函数,只需要使用时调用,不用关心函数的内部实现。
     2、自定义函数 程序员自己定义的函数。  
   ---------------------------------------    
     如何定义自己的函数:
     定义:返回值类型 函数名(形式参数列表)
          {语句;//代码片段     return返回值;}
    例:
       自定义数的和

       //编写函数int sumValue(int n):计算1n的和。

        int sumValue(int n){

            int sum = 0;

            for (int i = 1; i <= n; i++) {

            sum = sum + i;

          }

         return sum ;

        }


        返回值类型:voidintcharfloat...
    返回值类型可以使基本数据类型,也可以是void空类型。

         特别注意:
               1当函数的返回值类型是void的时候,函数体内不需要return返回值;
      2 当函数返回值不是void的时候,体内需要return返回值,并且要与返回值类型要与函数定义时的返回值类型保持一致。
      3程序遇到return,就会跳出函数,不再往下执行,所以不要在return后写任何代码。
      4return的返回值可以使常量,也可以是变量,但类型一定要和函数返回值一致。
    --------------------------------------           
    形式参数列表
    概念:需要参与函数执行的一个变量       形式参数的定义没有个数限制,可以随便定义
    定义:基本数据类型 参数名
     多个形式参数之间用逗号隔开; 形式参数和函数返回值类型没有关系
    函数返回值的类型与return中返回值类型一致;
    -----------------------------------------     
函数分类  1、根据返回值和参数可以将函数划分为4
     有参数,有返回值       无参数,无返回值    有参数,无返回值    无参数,有返回值。
         分类如下各例:

     //无参数,无返回值

      void introduce(void){

          printf("大家好!我来自火星,我叫*****\n");

      }

    //有参数 无返回值

      void num(int i)   //形式参数

      {

        printf("%d\n",i);

      }

    //有参数,有返回值

    int number(int age,float b ){

        printf("今年%d岁了\n",age);

        return age; 

    }


     //无参数,有返回值

      long lo(void){

         return 321546887945;

      }

         形参,实参 形参,出现在函数定义中,以变量的名字来表示实际函数调用过程中需要提供的值
       实参出现在函数调用过程中的
       注意:函数调用中,形参会拷贝实参的内容。传递参数是给函数传递信息的方式
          ----------------------------------------------------------------------------
    关于函数的返回值
     1、函数返回的值被称为函数的值,并且只能通过return语句返回主调函数。
     2
、一个函数只能有一个返回值。
     3
、函数即使没有返回值,也可以使用return来结束函数的执行。
     4return后边的语句不会被执行
        ------------------------------------------------------------------------------
       严格上的函数包括三个部分:函数声明、函数定义、函数调用
        函数声明就是对函数的描述(实际就是给函数取个名字,后边加分号),没有具体的实现,后边加分号结尾。
   注意的两点
       1、函数定义出现在主调函数之前,函数声明可以省略。
       2、函数定义出现在主调函数之后,需要提前说明函数。 
    函数嵌套      函数的嵌套
       C语言中不允许嵌套定义,但可以嵌套调用        
       C语言中允许函数再次调用函数本身,这种调用方式成为递归调用,这个函数就叫做递归函数        
      警告:递归调用一定要有出口!!!!!!!!
       如下例

   //用递归求n

    // n! = n * (n - 1)!

    // n=1    //递归调用的出口;

    int fun(int n);

    int fun(int n)

    {

         if (n == 1) {

             return 1;     //跳出递归的条件

           }

     return n * fun(n - 1);  //递归调用的公式

     }


   变量的作用域
     
变量的有效范围: 全局变量  局部变量
     
定义在函数体外的变量为全局变量
     
定义在函数体内的变量为局部变量
      全局变量和局部变量可以重名,但是在局部变量作用域内,只能访问局部变量。

结构体
 结构体:是一种自定义的数据类型。
 结构体声明;
    struct结构体名
    {
     类型说明符 成员名;
      ....               //可以定义多个结构体成员
     类型说明符 成员名;
    };
   格式如下:

   struct student1

   {

       int number;       //学号

       char name[20];    //姓名

       char sex;         //性别

       float score;      //成绩

        ……

   };

 
  
  结构体变量
   定义:有结构体修饰的变量叫做结构体变量
    struct结构体名 变量名 = {初值}
结构体成员的访问
    结构体变量名.成员变量名
 typedef
        为现有的类型创建一个类型别名
      语法:typedef 原类型名 新类型名

       typedef struct student{

            char name[20];

            float score;

            int age;

        } Student;


 结构体数组
 将多个结构体变量放到数组中,构成结构体变量

        typedef  struct student{

            int num;

            char name[20];

            float score;

        }Student;

        Student stu[5] = {{1, "red", 92.5},{2, "green", 92},{3, "bluk", 89},{4, "black", 96},{5 , "yellow", 90}};





版权声明:本文为博主原创文章,未经博主允许不得转载。

【C】结构体中包含函数

在《【C】Malloc与结构体,其实就是C语言里面的new和类》(点击打开链接)提到,C语言结构体里面也可以包含函数,如同类中有方法一样,但是不能通过直接放过一个函数进去,需要通过函数指针的方式,同时...
  • yongh701
  • yongh701
  • 2016年12月22日 17:21
  • 2822

c语言结构体成员作为函数参数

#include #include struct Worker{ char name[10]; char num[8]; }; void Sort(struct Worker wk[]){ ...
  • sinat_35821976
  • sinat_35821976
  • 2017年01月19日 12:54
  • 1268

菜鸟学习-C语言函数参数传递详解-结构体与数组

C语言中结构体作为函数参数,有两种方式:传值和传址。 1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数。在这种情...
  • Paul_C_V
  • Paul_C_V
  • 2015年07月14日 10:24
  • 2002

c语言基础语法六——结构体(完结)

1;关于c语言结构体的引入; 在前面已经介绍了整形(int,long,….),浮点型(flaot,double),字符型(char),还介绍了数组(存储一组具有相同类型的数据),字符串。但是在实际问...
  • zw1996
  • zw1996
  • 2016年12月24日 14:47
  • 1527

C语言复习之结构体基础知识

一.基础知识 1.聚合数据类型(aggregate data type)能够同时存储超过一个的单独数据。C提供了两种类型的聚合数据类型,数组和结构。 (1)数组是相同类型的元素的集合,它的每个元素...
  • u010417553
  • u010417553
  • 2013年05月25日 21:34
  • 604

函数返回结构体的内幕

函数返回结构体的内幕 在刚接触C语言编程时,无论是前辈还是教科书,都反复告诫我们两件事: ①函数的参数是值传递(意味着在函数中对参数本身的修改无法“传回”); ②不要返回函数体内局部变量的地址,...
  • stillvxx
  • stillvxx
  • 2014年11月23日 13:08
  • 3452

C语言结构体中定义函数指针详解

在学习嵌入式我们经常和结构体函数指针打交道,还有链表,环形缓冲区之类的,这里中点讲解结构体中定义函数指针。下面这个程序你看一遍你基本也明白用法了。 下面是我写的一个很简单的程序struct.c #in...
  • qq_21792169
  • qq_21792169
  • 2015年12月30日 17:24
  • 21018

C语言学习-结构体和文件操作

C语言是门经典的高级语言,只可惜大学学的不够好,工作后也没怎么用到,快把学的还给老师了,最近无聊之余,把C语言相关知识看了,编程还是在于多练和多思考,实践加学习才能领悟和找到解决问题的方法,下面是看了...
  • zhenghui1
  • zhenghui1
  • 2013年03月17日 18:12
  • 3975

C语言结构体(struct)常见使用方法

结构体与函数: 关于传参,首先: void func(int); func(a.b.c); 把结构体中的int成员变量当做和普通int变量一样的东西来使用,是不用脑子就想到的一种方法。 另外两...
  • huqinweI987
  • huqinweI987
  • 2014年04月14日 01:51
  • 415989

C语言结构体内嵌函数指针

/* .c文件声明:1、关于结构体定义以及初始化的注意事项。 2、关于C语言结构体内嵌函数指针实现面向对象。 对于一个结构体 struct a  { int b; int c; }; //结构体定...
  • MACMACip
  • MACMACip
  • 2017年02月08日 12:57
  • 1622
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言基础--函数和结构体
举报原因:
原因补充:

(最多只允许输入30个字)