C语言——函数(一)

目录

一.常见库函数

二.函数交换举例


一.常见库函数

附上库函数参考网址: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也会跟着变化,从而实现交换。

定义补充:

猜你喜欢

转载自blog.csdn.net/fax_player/article/details/131985323