C语言函数

函数

一个函数一个功能

不同函数的变量无法相互访问

定义和声明

  1. 当变量被定义的时候,编译器为变量申请内存空间并填充值
  2. 当变量被声明的时候,编译器就知道该变量被定义在其他地方
  3. 声明是通知编译器该变量名及相关的类型已存在,不需要在为此申请空间
  4. 局部变量既是定义又是声明

链接属性:

  1. external(多个文件中声明的同名标识符表示同一个实体)
  2. interna(单个文件声明的同名标识符表示同一个实体)
  3. none(声明的同名标识符被当作独立不同的实体)
  • 只有具备文件作用域的标识符,才能拥有链接属性
  • 使用static关键字可以使得原先拥有的external属性的标识符变为internal属性
    1. 使用static关键字修改链接属性,只对具有文件作用域的标识符生效
    2. 链接属性只能修改一次,也就是说一旦将标识符的链接属性变为internal,就无法变回external

生存期

静态存储区:文件作用域、函数(程序关闭自动释放)

自动存储区:代码块(代码块结束自动释放)

存储类型

auto(自动变量)

register(寄存器变量 )

  1. 将一个变量声明为寄存器变量,那么该变量就有可能被存放于CPU的寄存器中
  2. 寄存器变量和自动变量在很多方面的是一样的,他们都具有代码块作用域,自动存储期和空连接属性
  3. 将变量声明为寄存器变量,就无法通过取址运算符获取该变量的地址

static(静态局部变量:将多文件共享改变为单文件独享)

  1. 声明局部变量,局部变量指定为静态
  2. static使得局部变量具有静态存储期,所以他的生存期与全局变量一样,直到程序结束才会释放

extern

typedef(为数据类型定义别名)

全局变量:

  1. 如果不对全局变量进行初始化,那么他会自动初始化为0
  2. 在函数内部存在一个与全局变量同名的局部变量,编译器不会报错,而是屏蔽全局变量

切记:

不要大量的使用全局变量

  • 占用内存高
  • 污染命名空间
  • 提高了程序的耦合性

作用域:

C语言可以确认的四种作用域

  1. 代码块作用域(形参隶属于代码块)
  2. 文件作用域(声明)
  3. 原型作用域
  4. 函数作用域(只适用于goto语句)

关键字extern

参数和返回值:

类型名 函数名(参数列表)

{

​ 函数体

}

形参和实参

传值和传址

传数组:只能传进去数组首元素的地址

可变参数:

#include <stdarg.h>
-va_list//定义参数列表
-va_start//初始化参数列表
-va_arg//获取参数的值
-va_end//关闭列表

演示代码:

intlist(int n, ...)
{
	int i,sum = 0;
	va_list vap;
	va_start(vap,n);
	for(i = 0 ; i < n ; i++)
	{
		sum += va_arg(vap,int)
	}
	va_end(vap);
	return sum;
}

函数指针:

函数指针-->int (*p)();
指针函数-->int *p();

使用指针变量作为函数的返回值,就是指针函数

指针演示:

函数指针演示:

函数指针作为函数

演示结果

递归函数

必须有结束条件

递归求指针:

阶乘:

快速排序:

首先寻找最中间的点,左边的从左到右寻找大于中间点的数字并标记,右边的从右向左寻找小于中间的数字并标记,将找到的两个数字进行互换位置,知道轮询完所有的数字,

演示:

void quick_sort(int array[],int left,int right);
void quick_sort(int array[],int left,int right)
{
    int i=left,j=right;
    int temp;
    int pivot;
    pivot = array[(left+right)/2];
    while (i<=j) {
        while (array[i]<pivot)
        {
            i++;
        }
        while (array[j]>pivot)
        {
            j--;
        }
        if(i<=j)
        {
            temp = array[i];
            array[i] = array[j];
            array[j] = temp;
            i++;
            j--;
        }
    }

    {
       if(left<j)
       {
           quick_sort(array,left,j);
       }
       if(i<right)
       {
           quick_sort(array,i,right);
       }
    }
    
}

int main()
{
    int array[]={73,108,11,1181,101,10,104};
    int i,length;
    length=sizeof(array)/sizeof(array[0]);
    quick_sort(array,0,length-1);

    printf("resout:");
    for(i = 0;i<length;i++)
    {
        printf("%d ",array[i]);
    }
    printf("\n");
    return 0;
}
length=sizeof(array)/sizeof(array[0]);
quick_sort(array,0,length-1);

printf("resout:");
for(i = 0;i<length;i++)
{
    printf("%d ",array[i]);
}
printf("\n");
return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值