首页 > 其他分享 >C语言 - 函数

C语言 - 函数

时间:2025-01-18 21:56:47浏览次数:3  
标签:函数 int 局部变量 C语言 作用域 全局变量 变量

1、作用

        1、可以让程序模块化

        2、可以减少重复代码

        3、提高程序的可读性、可维护性和重用性

2、函数的三个部分

        1、函数的定义

                函数类型 函数名 (数据类型 1 形参1, 数据类型2 形参2,...)

                {

                        语句块;

                        return 返回值;

                }

                函数类型:函数运行结果的类型,如果不写默认为int类型,如果运行不想有运行结果的

                的类型可以为void类型

#include <stdio.h>

//两数相加的函数
int add(int a ,int b)
{
    int num = 0;
    num = a + b;
}

int main(void)
{
    int a = 10, b = 5;
    int num = 0;
    num = add(a + b);
    return 0;
}

//函数名:与变量名的要求保持一致
//  形参:定义时表示对数据的处理方式
//返回值:函数运行的结果

                注意:       

                        1、返回值类型与函数类型不一致,将返回值强制转化为函数类型

                        2、如果实参类型和形参不同,会将实参类型转换为形参类型之后传入函数内部

        2、函数的调用

                函数名(实参1,实参2,...)

                注意:实参与形参的个数一一对应

        3、函数的声明、

                函数类型 函数名 (数据类型 1 形参1, 数据类型2 形参2,...);

                

include <stdio.h>

int add(int a ,int b);//函数的声明

int main(void)
{
    int a = 10, b = 5;
    int num = 0;
    num = add(a + b);
    return 0;
}

//两数相加的函数
int add(int a ,int b)
{
    int num = 0;
    num = a + b;
}

                为什么要声明函数?

                        1、如果在调用函数之前没有声明它,编译器可能无法识别这个函数。

                        2、函数声明可以使程序更加模块化,尤其是在多个源文件中工作时,可以在一个                                  文件中声明函数,在另一个文件中定义函数。

                        3、可以确保程序的正确性和组织性。

3、变量的作用域

        指的是变量在程序中可以被访问和修改的范围,作用域决定了一个变量在程序中的生命周

        期以及它能被访问的区域

        1、局部变量

                局部变量是指在函数或代码块内部声明的变量。它只能在声明它的函数或代码块中

                访问,超出该范围后变量就不再有效

                 特点:

                        仅在声明它的函数或代码块中有效。

                        当函数或代码块执行完毕时,局部变量会被销毁。

                        局部变量的生命周期在其声明时开始,在函数或代码块结束时结束。

#include <stdio.h>

void function() {
    int x = 10;  // 局部变量 x
    printf("x = %d\n", x);  // 只能在函数内部访问
}

int main() {
    function();
    // printf("%d", x);  // 错误:x在此作用域中不可访问
    return 0;
}
        2、全局变量

                全局变量是指在所有函数外部声明的变量。它可以在整个程序中被任何函数访问和

                修改,直到程序结束。

                特点:

                        在整个程序中都有效,任何函数都可以访问。

                        全局变量的生命周期从程序开始执行到程序结束。

                        如果局部变量和全局变量有同名,局部变量会覆盖全局变量。

#include <stdio.h>

int x = 10;  // 全局变量

void function() {
    printf("x in function = %d\n", x);  // 可以访问全局变量
}

int main() {
    printf("x in main = %d\n", x);  // 访问全局变量
    function();
    return 0;
}
        3、静态变量

                静态变量是指通过 static 关键字声明的变量。静态变量可以是局部的,也可以是全

                局的。与普通局部变量不同,静态变量在程序运行时不会被销毁,其生命周期持续整

                个程序的执行过程。对于局部静态变量,它仅在函数内部可见,但不会每次进入函数

                时重新创建。

                特点:

                        静态变量在程序生命周期内始终存在,且只有第一次初始化时才会被赋值。

                        局部静态变量只在函数内可见,其他函数无法访问。

                        全局静态变量在声明它的文件内可见,其他文件无法访问。

#include <stdio.h>

void function() {
    static int count = 0;  // 局部静态变量
    count++;
    printf("count = %d\n", count);  // 静态变量会保留上次的值
}

int main() {
    function();  // 输出 count = 1
    function();  // 输出 count = 2
    function();  // 输出 count = 3
    return 0;
}
        4、外部变量

                外部变量是通过 extern 关键字声明的变量,它们通常定义在不同的源文件中。

      extern 关键字用于引用其他文件中的全局变量。

                特点:

       extern 用于访问在另一个源文件中定义的全局变量。

                        它只声明变量,不定义变量(不分配内存空间)。

// file1.c
#include <stdio.h>

int x = 10;  // 在 file1.c 中定义全局变量 x

// file2.c
#include <stdio.h>

extern int x;  // 引用 file1.c 中定义的全局变量 x

void function() {
    printf("x = %d\n", x);  // 访问 file1.c 中的 x
}

4、变量的生存周期

        1、变量从定义到被回收的整个过程称为生存周期

        2、局部变量执行到变量定义时分配空间按,超过变量作用域回收空间

5、变量的存储类型

        存储类型 数据类型 变量名;

        1、存储的4中类型

                auto                        自动型存储(局部存储)

                register                    寄存器存储

                extern                      外部存储

                static                        静态存储

        2、存储类型不写,默认为auto类型,auto将变量存储在栈空间中

        3、全局变量存放在静态区,全局变量可以和局部变量重名,局部变量会在作用域内将全局

                变量隐藏

        4、register将数据存在CPU内部的寄存器中,如果寄存器存满等价于auto类型

        5、extern声明一个变量/函数是外部存储的变量/函数

// file1.c
#include <stdio.h>

int global_var = 100;  // 定义外部变量

void printGlobalVar() {
    printf("global_var = %d\n", global_var);
}

// file2.c
#include <stdio.h>

extern int global_var;  // 声明外部变量

void accessGlobalVar() {
    printf("global_var in file2 = %d\n", global_var);
}
        8、static

                使得局部变量在函数调用间保持其值,不会在函数结束时销毁。作用域仍然是函数

                内部。

                静态全局变量:static 限制全局变量的作用域,仅在定义它的源文件中可见,无

                 法在其他文件中访问。

                 静态函数:static 限制函数的作用域,使其仅在定义该函数的源文件内可用。

                 生命周期:静态变量的生命周期是整个程序运行期,但其作用域可以受到限制。

                 使用 static 可以帮助你实现封装、限制作用域,并在需要保持变量状态时非常有用。

                可以防止多文件全局变量重名

6、函数传参

        1、值传递

                1、实参将值传递给形参

                2、函数体内部想使用函数体外部变量值的时候用值传递

                3、形参是实参的副本,行参的变化不会影响实参的变化

        2、整型数组的传递

int fun(int array[], int ten);

//array后面加[],表示传入的为整型数组名,而不是整数类型
//函数内部的array和外部数组名为同一数组,里面数据的变化会影响外面数组中值的变化

标签:函数,int,局部变量,C语言,作用域,全局变量,变量
From: https://blog.csdn.net/2302_77901571/article/details/145212849

相关文章

  • 在C语言中实现封装、继承和多态
    在C语言中,没有直接的支持封装、继承和多态等面向对象特性。C语言是结构化编程语言,通常通过函数和数据结构(结构体)来实现类似的功能。我们可以通过结构体、函数指针、和手动管理的对象生命周期来模拟C++中的面向对象的特性。下面我们将逐一讨论如何在C语言中实现封装、继承和多......
  • C语言知识点
    前言这篇博客并不是我个人所写,是我在网络上无意间看到了markdown版本,我觉得很不错,为了方便我当助班时带的学弟学妹通过我的博客学习C语言,我把这篇文章放在了我的博客里面,便于他们学习。如有侵权,请联系我删除。目录前言第1章程序设计和C语言C语言的发展及其特点结构化......
  • 嵌入式基础 C语言篇 数组.初阶
    一、基本概念逻辑:一次性定义多个相同类型的变量,并存储到一片连续的内存中语法释义:intbuf[5];buf是数组名,即这片连续内存的名称[5]代表这片连续内存总共分成5个相等的格子,每个格子称为数组的元素int代表每个元素的类型,可以是任意基本类型,也可以是组合类型,甚至可以是数组初......
  • 嵌入式基础 C语言篇 指针初阶
    一、指针的入门(1)、预备知识0、图解:1、内存地址字节:字节是内存的容量单位,英文称为byte,一个字节有8位,即1byte(00000000---11111111)=8bits(0---1)地址:系统为了便于区分每一个字节而对它们逐一进行的编号,称为内存地址,简称地址。在32位系统:说明:地址+1就是......
  • 嵌入式基础 C语言篇 错题
    (1) 若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是________。A.1     B.2    C.2.0    D.2.53/2=1;y=2.0(2)简述i++和++i    i++是先使用i的值,再i+1;++i是先i+1,再使用i的值底层原理:1、i++和++i都是带有返回值的函数2......
  • 第1讲:C语言常见概念
    目录1.C语言是什么?2.C语言的历史和辉煌3.编译器的选择VS20224.VS项目和源文件、头文件介绍5.第一个C语言程序6.main函数7.printf和库函数8.关键字介绍9.字符和ASCII编码10.字符串和\011.转义字符12.语句和语句分类13.注释是什么?为什么写注释?正文开始1.C语言......
  • 第2讲:C语言数据类型和变量
    目录1.数据类型介绍2.signed和unsigned3.数据类型的取值范围4.变量5.算术操作符:+、-、*、/、%6.赋值操作符:=和复合赋值7.单目操作符:++、--、+、-8.强制类型转换9.scanf和printf介绍正文开始1.数据类型介绍C语言提供了丰富的数据类型来描述生活中的各种数......
  • 函数模板问题
    在笔试过程中遇到函数模板问题,记录问题并给出解答。问题:下面代码会执行什么结果:#include<iostream>usingnamespacestd;template<typenameT>voidprint(Tt){cout<<"Template:"<<t<<endl;}voidprint(inti){cout<<"int:"&......
  • 数学知识(一)--质数、约数、欧拉函数、快速幂、扩展欧几里得、高斯消元
    目录一、质数1.试除法判断质数2.试除法分解质因数3.筛选法找质数(1)朴素筛法--埃氏筛(2)线性筛法二、约数 1.试除法求约数2.约数个数问题 3.约数之和问题4.欧几里得算法(辗转相除法)三、欧拉函数1.公式法求欧拉函数2.线性筛法求欧拉函数  3.欧拉定理和费马......
  • 操作系统进程-概述、fork/vfork、exit/_exit、getpid/getppid、wait/waitpid与exec族
    进程基本概念什么是进程:进程是程序的一次执行过程,进程是程序执行和资源管理的最小单元。在Linux环境下,每个正在运行的程序都被称为进程并行与并发:并行(微观上,一个很短时间范围内):在很短的时间段内(时间点上),两个事情同时发生并发(宏观上,一个时间段内):在一段时间内,多个事情同......