目录
一.常见库函数
附上库函数参考网址:https://cplusplus.com/
pow
base——底数,exponent——阶层,可以算整型也可以算浮点型,但返回值是浮点型。
如果不想看到编译器警告可以强制转换一下。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
//次方函数
int main()
{
int ret = (int)pow(2, 3);
printf("%d", ret);
return 0;
}
strcpy
把source指向的字符串放到destination中去。
char*实际上就是地址,目的地的地址与源头的地址。在数组中数组名就可以代表地址。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
char arr[10] = { "abc" };
char arr1[10] = { 0 };
strcpy(arr1, arr);
printf("%s", arr1);
return 0;
}
小问题:那么字符串的结束标志“\n”是否也会复制呢?
通过调试可以知道,“\n”也会被复制。
memset
*ptr指向内部储存空间,num个字节内容设置成value值。
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "hello c";
memset(arr, 'c', 5);
printf("%s", arr);
return 0;
}
二.函数交换举例
void Swap1(int x, int y)
{
int z = 0;
z = x;
x = y;
y = z;
}
int main()
{
int num1 = 0;
int num2 = 0;
scanf("%d %d", &num1, &num2);
printf("交换前:num1 = %d num2 = %d\n", num1, num2);
//实际参数
Swap1(num1, num2);
//函数调用的时候,将实参传递给形参
//形参其实是实参的一份临时拷贝
//对形参的修改,不会改变实参
printf("交换后:num1 = %d num2 = %d\n", num1, num2);
return 0;
}
函数调用的时候,将实参传递给形参
形参其实是实参的一份临时拷贝
对形参的修改,不会改变实参
这里会发现按照正常的逻辑来讲是可以交换的,但是一用函数又不能交换了。
这里我们通过窗口监视看一下。
我们可以看到实参传给形参的数值确实通过了,不同的是它们的地址。
接着发现里面的x,y发生了交换,但这个没有影响到外面的实参。
它们是完全独立的空间。
接下来我们来试试传递地址。
void Swap2(int*p1, int*p2)
{
int tmp = 0;
tmp = *p1;//tmp = num1;
*p1 = *p2;//num1 = num2;
*p2 = tmp;//num2 = tmp;
}
int main()
{
int num1 = 0;
int num2 = 0;
scanf("%d %d", &num1, &num2);
printf("交换前:num1 = %d num2 = %d\n", num1, num2);
//实际参数
Swap2(&num1, &num2);
printf("交换后:num1 = %d num2 = %d\n", num1, num2);
return 0;
}
成功交换。而这里面的原理如下图所示:
因为传递的是地址,所以在函数中的p1与p2与实参num1,num2联系着,一旦它们数值发生变化,那么因为有着对应的地址,所以num1,num2也会跟着变化,从而实现交换。
定义补充: