码迷,mamicode.com
首页 > 编程语言 > 详细

C语言基础 函数--思想的体现

时间:2015-04-30 21:44:40      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:

1.C语言由函数组成,main函数又称主函数,是程序的入口.

1.1函数定义:
    
1.1.1    格式:
        返回值类型 函数名(形式参数列表)
        {
            函数体
        }
    
1.1.2    函数名:  不允许相同

1.1.3    参数注意点:
        1.形式参数: 定义函数时函数名后面括号中的参数,简称形参
        2.实际参数: 调用函数时传入的具体数据,简称实参
        3.实参个数必须等于形参个数
        4.函数体内部不能定义和形参一样的变量
        5.如果是基本数据类型作为函数形参(int ,char等),是值传递,不会影响函数外实参的值
        6.一个函数可以没有形参,也可以有无限多个形参

 1 int sum(int x, int y) // x,y是形参,而且是基本数据类型,函数外的实参x,y还是5和4
 2 {
 3      // int x; // 错误,违反第4点
 4      x = 1;
 5      y = 2;
 6      return x + y;
 7 }
 8 
 9  /* void sum() // 不允许与上面函数重名
10  {
11                   
12  }
13   */
14 
15int main()
16{
17     int x = 5, y = 4;
18     sum(x, y); // 调用函数
19     // sum(x); // 错误,违反第3点
20 }

1.1.4    return的作用:
        1.退出函数,只要遇到return,函数马上退出
        2.返回一个具体值给函数调用者

1.1.5    返回值注意点:
        1.void代表没有返回值,return可写可省略
        2.如果没有明确返回值类型,默认是返回int类型
        3.就算明确声明了返回值类型,也可以不返回任何值(会警告)

 1 char test1() // 返回char类型
 2 {
 3     return A; // 不写也可(会警告)
 4 }        
 5 
 6 test2() // 默认返回int类型
 7 {
 8     return 0;         
 9 }
10 
11 int test3()
12 {
13     return 0; // 不写也可(会警告)
14 }
15         

1.1.6    特别注意:
        1.函数不能嵌套定义,可以嵌套调用
        2.函数不能重复定义,可以重复声明
        3.如果只有函数的声明,没有函数的定义
          3.1编译可以通过,因为编译器只检查语法合不合理,并不会检查函数有没有定义
          3.2链接报错,因为链接的时候会检查函数是否定义

/*
char test1()
{
    int test2(int x) // 此处错误,嵌套定义
    {
    return x+1;
    }
    return ‘a‘;            
}
*/
char test3()
{
    int x = 18;
    test4(x); // 函数调用了另一函数,嵌套调用
    return d;
}

int teat4(int y)
{
    return y-1;
}    

1.2    函数声明
         如果要调用的函数在函数调用者后,要对函数进行声明(在调用者前)

 1 int test(int x, int y); // 声明 
 2 int test(int, int); // 可以重复, 也可以省略形参名
 3 
 4 int main()
 5 {
 6     test(3,4); // 调用
 7     return 0;
 8 }
 9 
10 int test(int x, int y) // 函数定义
11 {
12     return x + y;         
13 }

1.3     函数调用
        
2.    函数与数组,指针

2.1    数组作为函数参数
        
        2.1.1 可以省略数组元素个数        
        2.1.2 传递的是整个数组的地址,修改形参数组元素的值,会影响外面的实参数组

 1 void test(int array[]) // 数组作为函数参数
 2 {
 3     array[0] = 100; // 修改数组元素值
 4 }
 5 
 6 int main()
 7 {
 8     int array[8] = {1,2,3,4,5,6,7,8};
 9     test(array); // 调用  传递地址,可以是数组名array,或者是数组第一个元素地 址&array[0]
10     printf("%d", array[0]); // 结果是100
11     return 0;
12 }

2.1.2    数组作为函数参数用指针形式传递

 1 void test(int *p)
 2 {
 3     *p = 0;
 4     *(p+1) = 5;
 5 }    
 6 int main()
 7 {
 8     int array[8] = {1,2,3,4,5,6,7,8};
 9     test(array); 
10     printf("%d, %d", array[1], array[0]); // 结果是5, 0
11     return 0;
12 }

2.2.1  指针作为函数参数
        传递的地址,修改形参的值,会影响外面的实参

 1 void test(int *p)
 2 {
 3     *p = 5;
 4 }
 5 int main()
 6 {
 7     int x = 1;
 8     int *px;
 9     px = &x;
10     test(px);
11     printf("%d", x); // 5
12     return 0;
13 }

2.2.2      返回指针的函数

 1 char *test() // 返回类型指针
 2 {
 3     return "sfs";
 4 }
 5 
 6 int main()
 7 {
 8     char *name = test();
 9     printf("%s", name); // 结果是sfs
10     return 0;
11 }

2.2.3      指向函数的指针

 1 int sum(int a, int b) // 已有函数
 2 {
 3     return a+b;
 4 }
 5 int main()
 6 {
 7     int a1 = 1, b1 =11;
 8     int a2 = 2, b2 = 3;
 9     int s;
10 
11     int (*p)(int, int); // 指针变量指向sum
12     p = sum;
13 
14     s = sum(a1, b1); // 直接调用函数
15     printf("%d\n", s);
16 
17     s = (*p)(a2, b2);// 间接调用函数  
18     // s = p(a2, b2); // 也行
19     printf("%d", s); 
20     return 0;
21 }

其实为函数提供了两种间接调用方法

C语言基础 函数--思想的体现

标签:

原文地址:http://www.cnblogs.com/frew/p/4469932.html

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