一.库函数
1.pow函数
由图可知pow函数 的返回类型是double型,参数类型也是double型。头文件是math.h
//pow函数的返回类型是double型,参数类型也是double型
//在使用时需要头文件<math.h>
#include<math.h>
int main()
{
int n = (int) pow(2, 5);
//pow的返回类型是double但是n是int型所以需要(int)进行强制类型转换
//pow(2,5)表示2的5次方
double x = pow(2, 5);
printf("%d\n%lf\n", n, x);
return 0;
}
2.strcpy函数
strcpy函数的返回类型和参数类型都是char,头文件是string.h
//strcpy函数的返回类型和参数都是char类型使用时需要头文件<string,h>
#include<string.h>
int main()
{
char arr1[20] = { "*****************" };
char arr2[] = { "i am handsome" };
strcpy(arr1, arr2);
//strcpy函数中把arr2中的字符复制到arr1中包括\0
//arr2中包括\0一共14个字符,但是arr1中有17个*
//所以arr1中未被复制的部分依然有*,只是遇到\0不再打印,arr1的数组大小不变
printf("%s\n", arr1);
return 0;
}
3.memsrt函数
void * memset ( void * ptr, int value, size_t num )
//memset函数返回值为空,需要头文件<string.h>
#include<string.h>
int main()
{
char arr[] = { "hellow C" };
memset(arr, 'c', 5);
//'c'表示把数组中其他字符替换成'c',5表示要替换的字符个数
//hellow C前五个字符被字符c替换
printf("%s\n", arr);
return 0;
}
二.自定义函数
2.1函数的组成
以一个简单的函数为例
int sum(int x, int y);//函数声明
int main()
{
int a = 5, b = 3;
int rst = sum(a, b);//函数调用
printf("%d\n", rst);
return 0;
}
int sum(int x, int y)//函数定义
{
return x + y;
}
2.11写一个函数可以找出两个整数中的最大值。
int max(int x, int y)
{
if (x >= y)
{
return x;
}
else
{
return y;
}
}
int main()
{
int a = 0, b = 0;
scanf("%d %d", &a, &b);
int rst = max(a, b);
printf("最大值是%d\n", rst);
return 0;
}
2.12写一个函数可以交换两个整形变量的内容。
void fun(int* x, int* y)
{
int t = 0;
t = *x;
*x = *y;
*y = t;
}
int main()
{
int a = 0, b = 0;
scanf("%d %d", &a, &b);
fun(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
把a和b的地址传递给x和y,*是解引用操作符,通过x和y中的地址来找到该地址所存储的变量
2.2函数的参数
2.2.1实际参数
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传递给形参。
2.2.2形式参数(形参)
形参指的是函数的函数名后括号中的变量,因为形参只有在被调用过程中才会被实例化(分配内存单元),形式参数在函数调用时建立,函数调用完成之后就自动销毁了。因此形参只在函数中有效、
3.函数的调用
3.1传值调用
函数的形参和实参分别占有不同的内存块,对形参的修改不影响实参。
3.2传址调用
形参和实参依旧占有不同的内存块,但形参的变量内容就是实参的地址,通过*这个解引用操作符来找到该地址引用的变量
传址调用就是把函数外部创建变量的内存地址传递给函数参数的一种调用方式
这种传参方式可以让函数外边的变量和函数真正建立联系,即函数内部可以直接操作函数外部的变量。
4.函数的嵌套调用和链式访问
4.1函数的嵌套调用
void fun1()
{
printf("hehe C\n");
}
void fun2()
{
printf("hellow C\n");
fun1();//在fun2函数内调用fun1函数
}
int main()
{
fun2();
}
4.2函数的链式访问
5.函数的声明,定义和调用
1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数
2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。
//当函数定义在函数调用前面时不需要用函数声明
int add(int x, int y)//函数定义
{
return x + y;
}
int main()
{
int a = 0, b = 0;
scanf("%d %d", &a, &b);
int rst = add(a, b);//函数调用
printf("%d\n", rst);
return 0;
}
//当函数定义在函数调用后面时必须要有函数声明
int add(int x, int y);//函数声明
int main()
{
int a = 0, b = 0;
scanf("%d %d", &a, &b);
int rst = add(a, b);//函数调用
printf("%d\n", rst);
return 0;
}
int add(int x, int y)//函数定义
{
return x + y;
}