Day 10 初识C语言 3.26

函数

可分为库函数和自定义函数,库函数就是c语言对我们所提供可使用的函数。

常见的有

IO函数(输入输出函数)

字符串以及字符操作函数

内存操作函数

时间/日期函数

数学函数

其他库函数

strcpy函数

#include 
#include 

int main()
{
	char arr1[] = "abcdef";       //a b c d e f \0
	char arr2[20] = "XXXXXXXXXXX";//X X X X X X X XXXX\000
	//能把arr1中的abcdef拷贝到arr2中
	strcpy(arr2, arr1);
	//string copy
	printf("%s\n", arr2);
	return 0;
}

strcpy函数会把\0也赋值出来。

memset函数

用于替换字符串内的字符。

void * memset ( void * ptr, int value, size_t num ); 
//sizeof的返回的值的类型是size_t
int main()
{
	char arr[] = "hello bit";
	memset(arr+6, 'X', 3);
	//1. 设置内存的时候是以字节为单位的
	//2. 每个字节的内容都是一样value

	printf("%s\n", arr);//XXXXX bit

	return 0;
}

传值调用和传址调用

值:将实参传递给形参,对形参的修改不会影响到实参。

址:把外部变量地址传递给函数参数来调用函数,让函数内部可以操作函数外部的变量。

函数的嵌套调用

函数可以嵌套调用但是不能嵌套定义。

链式访问

int main()
{
	//int len = strlen("abcdef");
	//printf("len = %d\n", len);

	//printf("len = %d\n", strlen("abcdef"));

	printf("%d", printf("%d", printf("%d", 43)));

	return 0;
}

把一个函数的返回值作为参数调入到另外一个函数中。

函数未定义

int Add(int x, int y)
{
	return x + y;
}

int main()
{
	int a = 10;
	int b = 20;
	int sum = Add(a, b);//函数的使用
	printf("%d\n", sum);
	return 0;
}

需要在使用函数前就申明函数,而不是如下。

int main()
{
	int a = 10;
	int b = 20;
	int sum = Add(a, b);//函数的使用
	printf("%d\n", sum);
	return 0;
}
int Add(int x, int y)
{
	return x + y;
}

这样编译器就会报错。

函数还可以放在同一个文件的不同分文件下面,比如在test.c中在开一个add.h和add.c的文件,在add.h中放置函数的声明(int Add(int x, int y);),在add.c中放置函数的定义(return x + y;),这两个合称为加法模块,在test.c中要使用Add函数时只需要引用头文件#include "add.h"就可以了。

创建.lib文件

在函数文件中右键函数文件,点开属性,配置属性,常规,配置类型,下拉选择静态库(.lib)。然后生成,生成解决方案。

#pragma comment(lib, "add.lib")

可以用以上代码导入静态库,导入前也需要引头文件。

函数递归

函数调用自身就叫做递归,使用条件:

存在限制条件,满足这个限制条件递归就不会继续。

每次递归调用后越来越接近这个限制条件。

void print(int n)
{
	if (n > 9)
	{
		print(n/10);
	}
	printf("%d ", n % 10);
}
//函数print会在(n>9)时不断调用自己,最终输出每个数字的位数。

再比如求一个字符串长度:

int my_strlen(char* str)
{
	if (*str != '\0')
		return 1 + my_strlen(str+1);
	else
		return 0;
}
//这样str最终会指向\0,return 1最终会计算出字符串长度。

你可能感兴趣的:(笔记,c语言)