小白笔记本【函数篇】(updating)

  • 一本笔记本,记录一些新遇到的东西。

1. qsort函数

函数基本介绍

  • qsort函数是C语言编译器函数库自带的 快速排序 函数。
  • qsort 的函数原型是void qsort(void* base, size_t num, size_t width, int(__cdecl* compare)(const void*,const void*)); 是对base所指数组进行排序。
  • qsort函数包含在C标准库- <stdlib.h>中。
参数 介绍
base 指向要排序的数组的第一个元素的指针。
nitems 由 base 指向的数组中元素的个数。
size 数组中每个元素的大小,以字节为单位。
compar 用来比较两个元素的函数,即函数指针(回调函数)

【回调函数】一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就说这是回调函数。

qsort(a, 1000, sizeof(int), comp);//比如说对1000个整数进行排序
int compare(const void*a, const void* b){
	return *(int*)a - *(int*)b;//此为由小到大排序(chosen)
	//return *(int*)b - *(int*)a; //此为由大到小排序
}

compare函数原型
compare( (void *) & elem1, (void *) & elem2 );

Compare 函数的返回值 描述
< 0 elem1将被排在elem2前面
0 elem1 等于 elem2
> 0 elem1 将被排在elem2后面

详情见 qsort_百度百科

笔记

  • 在使用qsort之前,首先应该定义回调函数compare。定义回调函数时,对不同的排序对象应该“因材施教”——返回不同的值。
  • qsort函数不返回任何值。

2. malloc函数

函数声明(函数原型)

void *malloc(int size);

说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。

与 new函数 比较

从函数声明上可以看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。

int *p;
p = new int; //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int)

int* parr;
parr = new int [100]; //返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100

而 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型的指针。

int* p;
p = (int *) malloc (sizeof(int));
  1. malloc 函数返回的是 void* 类型。
    如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量 ”。所以必须通过 (int *) 来将强制转换。
  2. 第二、函数的实参为 sizeof(int) ,用于指明一个整型数据需要的大小。
    若写为int* p = (int *) malloc (1);代码也能通过编译,但事实上只分配了1个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归,而直接“住进邻居家”!造成的结果是后面的内存中原有数据内容全部被清空。
  3. 另外有一点不能直接看出的区别是,malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。leetcode之【两数相加】C中的错误处理方式
  4. 关于返回值:分配成功返回指向该内存的地址,失败则返回 NULL
  5. 当内存不再使用时,应使用free()函数将内存块释放。
  6. 更详细的,见malloc函数,详解

3. strcmp函数

strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。

头文件:string.h

规则

  • 当s1<s2时,返回为负数;
  • 当s1=s2时,返回值= 0;
  • 当s1>s2时,返回正数。

说明

两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。如:

1.“A”<“B”
2.“A”<“AB”
3.“Apple”<“Banana”
4.“A”<“a”
5.“compare”<“computer”

特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数
ANSI标准规定,返回值为正数,负数,0 。而确切数值是依赖不同的C实现的。

  • 当两个字符串不相等时,C标准没有规定返回值会是1 或 -1,只规定了正数和负数。
  • 有些会把两个字符的ASCII码之差作为比较结果由函数值返回。但无论如何不能以此条依据作为程序中的流程逻辑。

相关函数

函 数 名 作 用
strcmp() 对两个字符串进行大小写敏感的比较
strcmpi() 对两个字符串进行大小写不敏感的比较
stricmp() 同strcmpi()
strncmp() 对两个字符串的一部分进行大小写敏感的比较
strnicmp() 对两个字符串的一部分进行大小写不敏感的比较
int strcmp(const char* s1, const char* s2)int strncmp(const char* str1, const char* str2, size_t n);

strncmp函数详情见strncmp百度百科

strcmpi函数详情见strcmpi百度百科

strnicmp函数详情见strnicmpy百度百科(这个词条略有小问题)

4. memset函数

memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。

void *memset(void *s, int ch, size_t n);

函数解释

将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。

作用

memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法

函数原型

memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组
c:是赋给buffer的值
count:是buffer的长度.

其他相关

发布了13 篇原创文章 · 获赞 2 · 访问量 282

猜你喜欢

转载自blog.csdn.net/AuthurWhywat/article/details/105001515