函数是什么
维基百科中对函数的定义:子程序
- 在计算机科学中,子程序,是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责
完成某项特定任务,而且相较于其他代码,具备相对的独立性
- 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库
C语言函数的分类
- 库函数
- 自定义函数
库函数
如:printf
、scanf
、strlen
、strcmp
、rand
、srand
、time
C语言并不直接实现库函数,而是提供了C语言的标准和库函数的规定(功能、名称、参数、返回值、返回类型…),库函数的实现一般是由编译器实现的
把常用的一些功能实现成函数,集成为库,由C语言直接提供,支持可移植性和提高程序的效率
使用库函数必须包含对应的头文件**#include <.h>
**
库函数查询:
cplusplus.com(旧版)推荐
MSDN (Microsoft Developer Network)
MSDN离线版(使用索引而不是搜索)
https://en.cppreference.com(英文版)
https://zh.cppreference.com(中文版,翻译比较准确但不够直观,搜索功能使用的是谷歌)
C语言常用库函数:
- IO函数(输入输出函数:
scanf
、printf
、getchar
、putchar
、…) - 字符串操作函数(
strlen
、strcmp
、…) - 字符操作函数(
islower
(判断某个字符是否为小写)、isupper
(判断某个字符是否为大写)、…) - 内存操作函数(
memset
、memcmp
、…) - 时间/日期函数(
time
、…) - 数学函数(
sqrt
(求平方根)、pow
(求指定次方)、…) - 其他库函数
strcpy
string copy——字符串拷贝
char * strcpy (char * destination, const char * source);
把str1
拷贝到str2
中:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
char str1[4] = { 'a', '\0', 'b', '\0' };//'a' '\0' 'b' '\0'
char str2[5] = "xxxx";//'x' 'x' 'x' 'x' '\0'
strcpy(str2, str1);//左粘贴,右复制,
printf("%s\n", str2);//只打印a,因为修改后str2的元素为'a' '\0' 'x' 'x' '\0'
return 0;
}
结论:str1
从起始字符开始,直到第一个'\0'
会被拷贝到str2
中,其余元素不发生拷贝
memset
memory set——内存设置(内存块填充)
void * memset (void * ptr, int value, size_t num);
sizeof返回的值的类型是size_t,size_t就是专门为sizeof创建的,其本质就是unsigned int(无符号整型),因为其求大小不可能求出负数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>//memset
int main()
{
char str[] = "hello bit";
memset(str, 'x', 5);//单位字节
memset(str + 6, 'x', 3);//从中间开始填充
printf("%s", str);//xxxxx xxx
return 0;
}
自定义函数
自定义函数和库函数一样,有返回值类型、函数名、函数参数、函数体,但这些都是自己设置并实现的
求最大值
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int get_max(int x, int y)
{
return (x > y) ? (x) : (y);
}
int main()
{
int num1 = 0;
int num2 = 0;
scanf("%d %d", &num1, &num2);
int max = get_max(num1, num2);
printf("max = %d\n", max);
return 0;
}
整型变量交换
#define _CRT_SECURE_NO_WARNINGS 1
#in