首页 > 其他分享 >C和指针:标准函数库

C和指针:标准函数库

时间:2024-09-18 16:57:56浏览次数:12  
标签:函数库 int double void setjmp char 标准 指针 函数


整型函数

算术 <stdlib.h>
int abs( int value);
long int labs( long int value );
div_t div( int numerator, int denominator );
ldiv_t ldiv( long int numer,long int denom);

abs 函数返回它的参数的绝对值.

div 函数把它的第2个参数(分母)除以第1个参数(分子),产生商和余数,用一个 div_t结构返回.

随机数<stdlib.h>

伪随机数(pseudo-random number)

int rand( void);
void srand( unsigned int seed );

rand返回一个范围在0和RAND_MAX(至少为32,767)之间的伪随机数。当它重复调用时,

函数返回这个范围内的其他数。为了得到一个更小范围的伪随机数,首先把这个函数的返回值根据

所需范围的大小进行取模,然后通过加上或减去一个偏移量对它进行调整。

一个常用的技巧是使用每天的时间作为随机数产生器的种子(seed).

srand((unsigned int)time(0))
字符串转换 <stdlib.h>
int atoi( char const *string);
long int atol(char const *string);
long int strtol(char const *string, char **unused,int base);
unsigned long int strtoul( char const *string, char **unused, int base);

字符串转换为数

浮点型函数
三角函数 <math.h>
double sin( double angle);
double cos( double angle );
double tan( double angle);
double asin( double value);
double acos( double value );
double atan( double value );
double atan2( double x, double y);
双曲函数 <math.h>
double sinh( double angle);
double cosh( double angle);
double tanh( double angle);
对数和指数函数 <math.h>
double exp( double x);
double log( double x);
double log10( double x);
浮点表示形式 <math.h>
double frexp( double value, int *exponent );
double ldexp( double fraction, int exponent );
double modf( double value, double *ipart );
幂 <math.h>
double pow( double x, double y);
double sqrt( double x);
底数、顶数、绝对值和余数<math.h>
double floor( double x);
double ceil( double x);
double fabs( double x);
double fmod( double x, double y);

floor向下取整,ceil向上取整,fabs取绝对值,fmod 函数返回x除以y所产生的余数,这个除法的商被限制为一个整数值。

字符串转换 <stdlib.h>
double atof(char const *string);
double strtod(char const *string,char **unused );

如果任一函数的参数包含了前导的空白字符,这些字符将被忽略。函数随后把合法的字符转换为一个 double 值,忽略任何缀尾的非法字符。这两个函数都接受程序中所有浮点数字面值的书写形式.

日期和时间函数
clock_t clock(void);

可以在 main 函数刚开始执行时调用clock,然后把以后调用 clock 时所返回的值减去前面这个值,是处理器时钟滴答的次数。为了把这个值转换为秒,把它除以常量CLOCKS_PER_SEC。

......

时间和日期的转换函数用到再看。

非本地跳转<setjmp.h>

setjmp和longjmp函数提供了一种类似 goto 语句的机制,但它并不局限于一个函数的作用域之

内。这些函数常用于深层嵌套的函数调用链。如果在某个低层的函数中检测到一个错误,你可以立

即返回到顶层函数,不必向调用链中的每个中间层函数返回一个错误标志。

int setjmp( jmp_buf state );
void longjmp( jump_buf state, int value);

setjmp 函数:一个函数中调用 setjmp 并传递一个类型为 jmp_buf 的数组作为参数时,setjmp 将会保存当前程序执行环境的一个快照(包括处理器寄存器和程序计数器等状态信息)到这个 jmp_buf 数组中。

如果 setjmp 没有遇到其后的 longjmp 调用,则它会返回 0。

longjmp 函数:一旦在程序的其他部分遇到了 longjmp 调用,并且传入了之前 setjmp 初始化的 jmp_buf 数组以及一个非零值作为跳转值,那么程序的控制就会立即跳回到与那个 jmp_buf 关联的 setjmp 处。

当 setjmp 不是因为 longjmp 而返回时,它的返回值是 0。

当 setjmp 因为 longjmp 而返回时,它的返回值就是 longjmp 调用时传递的那个非零值。

可以通过检查 setjmp 返回值是否为 0 来区分这两种情况。

#include <stdio.h>
#include <setjmp.h>
jmp_buf buf;
void do_something() {// 如果有错误发生
    if (some_error_occurred) {
        longjmp(buf, 1); // 跳回到setjmp设置的点
    }
}
int main() {
    int ret;
    ret = setjmp(buf); // 保存当前环境
    if (ret == 0) {    // 第一次调用setjmp后,ret为0
        do_something(); // 执行一些操作
    } else {            // 如果不是0,说明是从longjmp回来的
        printf("Error occurred!\n");
    }
    return 0;
}
打印可变参数列表 <stdarg.h>
int vprintf( char const *format, va_list arg);
int vfprintf( FILE *stream, char const *format, va_list arg );
int vsprintf( char *buffer,char const *format, va_list arg);

这些函数与它们对应的标准函数基本相同,但它们使用了一个可变参数列表。

执行环境
终止执行 <stdlib.h>
void abort( void) 
void atexit( void(func)( void));
void exit( int status );

abort函数用于不正常地终止一个正在执行的程序。atexit 函数可以把一些函数注册为退出函数(exit function)。当程序将要正常终止时(或者由于调用exit,或者由于main 函数返回),退出函数将被调用,exit 函数用于正常终止程序。

断言<assert.h>
void assert( int expression);

当它被执行时,这个宏对表达式参数进行测试。如果它的值为假(零),它就向标准错误打印一条诊断信息并终止程序,包含表示式和源文件的名字以及断言所在的行号。如果表达式为真(非零),它不打印任何东西,程序继续执行,可以在编译时通过定义 NDEBUG消除所有的断言。

#define NDEBUG
环境 <stdlib.h>
char *getenv( char const *name);

getenv函数在列表中查找一个特定的名字,如果找到,返回一个指向其对应值的指针。程序不能修改返回的字符串。如果名字未找到,函数就返回一个NULL指针。

执行系统命令<stdlib.h>
void system( char const *command );

system函数把字符串参数传递给宿主操作系统,这样就可以作为一条命令,由系统的命令处理器执行。

排序和查找<stdlib.h>

qsort 函数在一个数组中以升序的方式对数据进行排序。

标签:函数库,int,double,void,setjmp,char,标准,指针,函数
From: https://blog.51cto.com/u_16969274/12047258

相关文章

  • C++中一般指针,指针数组,数组指针
    凤凰台上凤凰游,凤去台空江自流。吴宫花草埋幽径,晋代衣冠成古丘。三山半落青天外,二水中分白鹭洲。总为浮云能蔽日,长安不见使人愁。                            ——《登金陵凤凰台》【唐】李白 今天是中秋节,小......
  • Rust有指针类型数据吗?是否可以查看一个变量的内存地址?
    在Rust中,虽然不像C/C++那样直接使用传统的指针类型,但Rust依然有指针的概念,且提供了多种安全的方式来操作和管理内存。你可以通过一些Rust的特性查看变量的内存地址并安全地进行指针操作。1.引用(References)Rust的引用(&和&mut)可以理解为一种安全的、受所有权规则和借......
  • 算法学习每日一题之2332. 坐上公交的最晚时间:二分答案 & 贪心双指针
    Problem:2332.坐上公交的最晚时间人话题意:你是一个懒惰的人,虽然你要赶公交车,但你想多睡会,恰好你知道每辆车的发车时间buses和每辆车容capacity,和每个乘客乘车的时间passenger,旨在求可以赶上公交车的最晚出发时间。思路一:二分答案求最晚能满足赶上公交的时间,可以发现......
  • 【C语言从不挂科到高绩点】19-指针01【重点知识】
    Hello!彦祖们,俺又回来了!!!,继续给大家分享《C语言从不挂科到高绩点》课程!!本节将为大家讲解C语言中非常重要的知识点-指针:本套课程将会从0基础讲解C语言核心技术,适合人群:大学中开设了C语言课程的同学想要专升本或者考研的同学想要考计算机等级证书的同学想要从事C/C++/嵌......
  • 【每日一题】LeetCode 2332.坐上公交的最晚时间(数组、双指针、二分查找、排序)
    【每日一题】LeetCode2332.坐上公交的最晚时间(数组、双指针、二分查找、排序)题目描述给你一个下标从0开始长度为n的整数数组buses,其中buses[i]表示第i辆公交车的出发时间。同时给你一个下标从0开始长度为m的整数数组passengers,其中passengers[j]表示第......
  • PDF标准详解(五)——图形状态
    在第三节中,我们说到Q/q这一对操作符是用来保存和还原图形状态的,那个时候只有一个简单的概念,变换矩阵是图形状态的一员,那么什么是图形状态,以及有哪些图形状态呢?本节将要描述这部分的内容图形状态一个PDF应用程序维护内部数据结构称为图形状态,它保存了当前图形控制参数。这些参数......
  • C++_指针的超详细讲解,带你层层深入理解指针
    C++ 指针学习C++的指针既简单又有趣。通过指针,可以简化一些C++编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的C++程序员,学习指针是很有必要的。正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号......
  • 不升级 POI 版本,如何生成符合新版标准的Excel 2007文件
    开心一刻记得小时候,家里丢了钱,是我拿的,可爸妈却一口咬定是弟弟拿的爸爸把弟弟打的遍体鳞伤,弟弟气愤的斜视着我我不敢直视弟弟,目光转向爸爸说到:爸爸,你看他,好像还不服问题描述项目基于POI4.1.2生成Excel2007文件,已经对接了很多客户,也稳定运行了好几年了;就在前两天,对接一个新的......
  • [C高手编程] 数组与指针:多维数组、动态数组、指针运算与字符串
    ......
  • 【时时三省】(C语言基础)指针进阶 例题8
    山不在高,有仙则名。水不在深,有龙则灵。              ----CSDN时时三省第一个打印2a+6不管它是多大前面是=s 都得变成两个字节所以打印2第二个打印5sizeof里面的表达式是不参与运算的所以打印5上面所有例题总结:数组名的意义1.sizeof(......