码迷,mamicode.com
首页 > 其他好文 > 详细

C基础回顾4

时间:2015-05-11 23:41:02      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

一、函数:

函数原型:

            所有的函数都应该具有原型,尤其是那些返回值不是整数的函数。

             无形参的函数原型    int * func(void)

传递给函数的标量参数————传值调用

传递给函数的数组参数————传调用

例子:返回某个int型数据在数组中的位置的函数:

 1 #include<stdio.h>
 2 int * find_int(int key, int array[], int length)
 3 {
 4     int i=0;
 5     for(i=0;i<length;i++){
 6         if(array[i])==key)
 7             return  &array[i];          // 返回的是指向该位置的指针
 8     }
 9      return null;                     //此处不要省略,更加规范
10 }

c中进行数据交换的函数以及调用:

 函数:

1 void swap(int *x ,int *y)
2 {
3      int temp;
4      temp = *x;
5      *x = *y;
6      *y = temp;    
7 }

函数调用:   swap(&a , &b);

ADT(抽象数据类型)和黑盒:

c通过 设计和实现抽象数据类型 可以限制函数和 数据定义的作用域

抽象数据类型的基本思想 ----模块具有功能说明----模块所执行的任务和接口说明----模块的使用

模块的用户并不需要知道模块实现的任何细节,并且除了已经定义好的那些接口以外, 用户不能一任何方式访问模块。

 基本思想:限制对模块的访问是通过static关键字的合理使用实现的,他可以限制对那些并非接口的函数和数据的访问。

 

 

递归函数:

   当函数被调用时,变量的空间是创建于运行时堆栈上的。以前的函数的变量仍保留在堆栈上,被覆盖。

      例子:                //接收一个整型数,转换为字符,并打印

1 #include<stdio.h>
2 void binary_to_ascii(unsigned int value)       //假设输入是4267
3 {
4     unsigned int quotient;
5     quotient = value/10;
6     if(quotient !=0)
7         binary_to_ascii(quotient);
8      putchar(value%10+0);
9 }

递归与迭代:

             如斐波那契函数,递归调用将设计一些运行时开销,参数必须压在堆栈中,为局部变量分配内存空间,寄存器的值必须保存。

                          n<=1:1            

 Fibonacci(n)=   n=2:1

                          n>2 : Fibonacci(n-1)+ Fibonacci(n-2)

              如用递归调用代价:远远不止一个冗余计算,每个递归都触发另外两个递归调用。

用迭代法实现:

 1 long fibonacci (int n)
 2 {
 3     long result;
 4     long previous_result;
 5     long next_older_result;
 6     result = previous_result = 1;
 7     while(n>2){
 8         n-=1;
 9         next_older_result = previous_result;
10         previous_result = result;
11         result = previous_result+next_older_result;
12    }
13    return result;
14 }

可变参数列表

宏 stdarg 定义与 stdarg.h 头文件   (包括 一个类型 va_list 和 三个宏 va_start  va_arg  va_end)

例子:(计算指定数量的值的平均值)

 1 #include<stdarg.h>
 2 float average(int n_values , ...)     //注意参数列表的省略号,且参数列表中至少要有一个命名参数
 3 {
 4     va_list  var_arg;          //声明va_list类型的变量与三个宏配合使用
 5     int  count;
 6     flout sum = 0;
 7     
 8     va_start (var_arg,n_values);    //准备访问可变参数        var_arg 通过va_start宏 进行初始化
 9 
10     for(count = 0 ; count <n_values ; count+=1)
11     {
12         sum+= va_arg(var_arg , int);         //添加取自可变参数列表的值。
13     }
14     
15      va_end(var_arg) ;         //完成处理可变参数
16         
17        return sum/n_values;

 

 

二、数组

        

C基础回顾4

标签:

原文地址:http://www.cnblogs.com/doudingbest/p/4495802.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!