C语言函数

函数的封装(main.c  bubble.c  bubble.h)以冒泡算法为例

main.c主函数实现

#include <stdio.h>
#include <stdbool.h>

#include "bubble.h"

int main(int argc, char const *argv[])
{
    int array[] = {5,4,3,2,1};
    int len = sizeof(array) / sizeof(array[0]);
    bubble(array, len);

    for(int i = 0; i < len; i++)
        printf("%d\t",array[i]);

    printf("\n");
    return 0;
}

bubble.c是存放冒泡算法

#include <stdbool.h>
#include <stdio.h>

bool bubble(int *array, int lenght)
{
    if(array == NULL || lenght <= 0)
    {
        return false;
    }

    for(int i = 0; i < lenght-1; i++)
    {
        for(int j = 0; j < lenght-i-1; j++)
        {
            if(array[j] < array[j+1])
            {
                int temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
    return true;
}

bubble.h是冒泡算法的函数声明

bool bubble(int *array, int lenght);
编译程序不能使用快捷键,需要命令编译
gcc main.c bubble.c -o main.exe
执行程序
./main.exe

gcc编译原理

1.将c文件进行预编译,作用是将头文件里面的内容进行展开,就是将头文件的内容拷贝到main函数上面
    gcc main.c -o main.i -E

2.生成汇编程序,作用是将c文件编译成更加底层的编程语言汇编程序
    gcc main.i -o main.s -S

3.将汇编程序生成未链接的可执行程序
    gcc main.s -o main.o -c

4.将未连接的可执行程序生成已链接的可执行程序
    gcc main.o -o main.exe

C进程内存布局

 详细内容见下

 堆内存

 堆是唯一可被开发者自定义的区段,开发者可以根据需要申请内存的大小、决定使用的时间长短

 

相关API:

  • 申请堆内存:malloc() / calloc()

  • malloc不会清空,有一些随机数要手动清空,可以用msmset()赋值,以字节为单位

  • calloc()则不用

  • 清零堆内存:bzero()

  • 释放堆内存:free() 只能释放堆内存,并且只能释放整块堆内存

 realloc()扩容,在原来的基础上

函数指针(非常重要)

概念

  • 函数指针变量,就是用来保存函数地址的变量

  • 函数名相当于这个函数的首地址

int func(int a, int b);
// 函数指针,指向的函数类型为返回值为int 参数为(int,int)的函数
int (*pfunc)(int a, int b); 

回调函数(必须掌握)

调用一个函数,这个函数传递函数指针,被调用的的这个函数通过这个函数指针进行调用其他函数,我们把这种方式称为回调函数

递归函数

    什么时候用到递归  : 需要满足有规律递减条件,递减到某个程度是可以退出的
    func()
    {
        func()
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值