C 标准库 - <stdlib.h>

C 标准库 - <stdlib.h>

概述

C 标准库中的 <stdlib.h> 头文件提供了许多用于内存分配、转换、排序和搜索的标准函数。这些函数在 C 程序开发中非常常见,尤其是在处理数据结构和动态内存分配时。本文将详细介绍 <stdlib.h> 头文件中的主要函数及其应用。

主要函数

1. 动态内存分配

malloc()

malloc(size_t size) 函数用于分配指定大小的内存块,并返回指向内存块的指针。如果分配成功,返回的指针不为 NULL

c 复制代码
void *malloc(size_t size);
free()

free(void *ptr) 函数用于释放由 malloc()calloc()realloc() 分配的内存。如果传入的指针为 NULL,则函数不执行任何操作。

c 复制代码
void free(void *ptr);
calloc()

calloc(size_t num_elements, size_t size) 函数用于分配指定大小的内存块,并将所有内容初始化为 0。它等价于调用 malloc()memset() 的组合。

c 复制代码
void *calloc(size_t num_elements, size_t size);
realloc()

realloc(void *ptr, size_t new_size) 函数用于重新分配内存块的大小。如果传入的指针为 NULL,则与 malloc() 类似;如果传入的指针不为 NULL,则 realloc() 会尝试扩展或缩小内存块的大小。

c 复制代码
void *realloc(void *ptr, size_t new_size);

2. 数据转换

atoi()

atoi(const char *str) 函数用于将字符串转换为整数。如果字符串中的字符不是数字,则返回 0。

c 复制代码
int atoi(const char *str);
atof()

atof(const char *str) 函数用于将字符串转换为浮点数。如果字符串中的字符不是数字,则返回 0.0。

c 复制代码
double atof(const char *str);
atol()

atol(const char *str) 函数用于将字符串转换为长整数。如果字符串中的字符不是数字,则返回 0。

c 复制代码
long atol(const char *str);

3. 排序和搜索

qsort()

qsort(void *base, size_t num_elements, size_t size, int (*comparator)(const void *, const void *)) 函数用于对元素数组进行排序。comparator 是一个比较函数,用于比较两个元素。

c 复制代码
void qsort(void *base, size_t num_elements, size_t size, int (*comparator)(const void *, const void *));
bsearch()

bsearch(const void *key, const void *base, size_t num_elements, size_t size, int (*comparator)(const void *, const void *)) 函数用于在已排序的元素数组中搜索指定元素。如果找到,返回指向该元素的指针;否则返回 NULL

c 复制代码
void *bsearch(const void *key, const void *base, size_t num_elements, size_t size, int (*comparator)(const void *, const void *));

应用实例

以下是一个使用 <stdlib.h> 中函数的简单示例:

c 复制代码
#include <stdio.h>
#include <stdlib.h>

int compare_int(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int numbers[] = {5, 2, 9, 1, 5, 6};
    int num_elements = sizeof(numbers) / sizeof(numbers[0]);
    int i;

    // 使用 qsort 对数组进行排序
    qsort(numbers, num_elements, sizeof(int), compare_int);

    // 输出排序后的数组
    for (i = 0; i < num_elements; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n");

    return 0;
}

在这个例子中,我们首先定义了一个比较函数 compare_int,用于比较两个整数。然后使用 qsort() 函数对 numbers 数组进行排序,并输出排序后的结果。

总结

C 标准库中的 <stdlib.h> 头文件提供了许多实用的函数,可以帮助我们更高效地开发 C 程序。通过了解并熟练使用这些函数,我们可以更好地处理内存分配、数据转换、排序和搜索等任务。

相关推荐
薛定谔的猫喵喵9 小时前
基于PyQt5的视频答题竞赛系统设计与实现
开发语言·qt·音视频
岱宗夫up9 小时前
Python 数据分析入门
开发语言·python·数据分析
码界筑梦坊9 小时前
325-基于Python的校园卡消费行为数据可视化分析系统
开发语言·python·信息可视化·django·毕业设计
多恩Stone10 小时前
【RoPE】Flux 中的 Image Tokenization
开发语言·人工智能·python
李日灐10 小时前
C++进阶必备:红黑树从 0 到 1: 手撕底层,带你搞懂平衡二叉树的平衡逻辑与黑高检验
开发语言·数据结构·c++·后端·面试·红黑树·自平衡二叉搜索树
Risehuxyc10 小时前
备份三个PHP程序
android·开发语言·php
lly20240610 小时前
PHP Error: 常见错误及其解决方法
开发语言
网安墨雨10 小时前
Python自动化一------pytes与allure结合生成测试报告
开发语言·自动化测试·软件测试·python·职场和发展·自动化
毕设源码李师姐10 小时前
计算机毕设 java 基于 java 的图书馆借阅系统 智能图书馆借阅综合管理平台 基于 Java 的图书借阅与信息管理系统
java·开发语言·课程设计
忆~遂愿10 小时前
Runtime 上下文管理:计算实例的生命周期、延迟最小化与上下文切换优化
java·大数据·开发语言·人工智能·docker