zoukankan      html  css  js  c++  java
  • C语言入门-函数

    一、初见函数

    求出1到10、20到30和35到45的三个的和

    #include <stdio.h>
    
    // 定义一个函数
    void sum(int begin, int end)
    {
    	int sum = 0;
    	int i = 0;
    	for (i = begin; i <= end; i++)
    	{
    		sum += i;
    	}
    	printf("%d到%d的和是%d
    ", begin , end , sum);
    }
    
    int main()
    {
    	sum(1,10);
    	sum(20,30);
    	sum(35,45);
    	return 0;
    }
    

    二、函数的定义和使用

    1. 函数是一块代码,接收零个或者多个参数,做一件事,并返回另个或者一个值
    2. 其他的和java差不多,这里就不详细记录了

    从函数中返回值

    // 定义返回值的类型
    int max(int a , int b)
    {
    	int ret;
    	if (a > b){
    		ret = a;
    	}else{
    		ret = b;
    	}
    	// 这个就是返回值
    	return ret;
    }
    
    int main()
    {
        // 接收返回的值
    	int x = max(3,6);
    	printf("%d
    ", x);
    
    	return 0;
    }
    

    三、函数的先后关系

    像上面把max函数写在上面是因为:

    1. c的编译器自上而下的顺序分析你的代码
    2. 在看到max函数的时候,他要知道max函数的样子
    3. 也就是max函数需要几个参数,每个参数如何,返回什么类型
    4. 如果main函数写在上面的话,需要把自己定义的函数先进行声明,但是现在大部分编译器也可以不用声明了
    // 进行声明
    int max(int a , int b);
    
    int main()
    {
    	int x = max(3,6);
    	printf("%d
    ", x);
    	return 0;
    }
    
    
    // 定义返回值的类型
    int max(int a , int b)
    {
    	int ret;
    	if (a > b){
    		ret = a;
    	}else{
    		ret = b;
    	}
    	// 这个就是返回值
    	return ret;
    }
    

    参数传递

    类型不匹配?

    1. 调用函数时给的值与参数的类型不匹配是C语言传统上最大的漏洞
    2. 编译器总是把你类型转换好,但这可能不是你所期望的
    3. 后面的语言,c++/java在这方面很严格
    void cheer(int i)
    {
    	printf("cheer %d
    ", i);
    }
    
    int main()
    {
    	double f = 8.4;
    	cheer(f);  // 8
    	cheer(2.0);  // 2
    
    	return 0;
    }
    

    四、传值

    1. 每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系
    2. 过去,对于函数参数表中的参数,称“形式参数”,调用是给的参数叫“实际参数”

    五、本地变量(局部变量)

    1. 函数的每次运行,就产生一个独立的变量空间,在这个空间中的变量,就是函数的这次运行多独有的,称之为本地变量
    2. 定义在函数内部的变量就是本地变量
    3. 参数也是本地变量

    变量的生存期和作用域

    1. 生存期:什么时候这个变量开始出现了,什么时候消亡了
    2. 作用域:在代码的什么范围内可以访问这个变量
    3. 对于本地变量:前面两个问题的答案都是 --- 在大括号内

    本地变量的规则

    1. 本地变量都是定义在块(大括号)内的
      • 他可以是定义在函数的块内
      • 也可以定义在语句的块内
    2. 程序运行进入这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了
    3. 块外面定义的变量在里面仍然有效
    4. 块里面定义了和外面同名的变量则覆盖了外面的
    5. 不能在一个块内定义同名的变量
    6. 本地变量不会被默认初始化
    7. 参数在进入函数的时候会初始化
  • 相关阅读:
    关于 MySQL int tinyint 类型的那点事
    PHP日期、时间戳相关的小程序
    [leedcode 236] Lowest Common Ancestor of a Binary Tree
    [leedcode 235] Lowest Common Ancestor of a Binary Search Tree
    [leedcode 234] Palindrome Linked List
    [leedcode 233] Number of Digit One
    [leedcode 232] Implement Queue using Stacks
    [leedcode 231] Power of Two
    [leedcode 230] Kth Smallest Element in a BST
    [leedcode 229] Majority Element II
  • 原文地址:https://www.cnblogs.com/mengd/p/11613873.html
Copyright © 2011-2022 走看看