小白zhi学习C语言——函数

1.使用文档学习库函数

https://cplusplus.com/reference/

https://en.cppreference.com/(英文版)

https://zh.cppreference.com/(中文版)

从以上网址找到要学的库函数

文档中有:函数名、函数原型、详细介绍、形式参数、返回值、例子、相关的其他函数

2.自定义函数

a和b是实际参数,x和y是形式参数,实际参数传给形式参数时,形参是实参的一份临时拷贝,数据传过来了,但是形参有自己独立的空间,也就是说,形参和实参有相同的数据,但是存放地址不同,所以修改形参不会影响实参。

//写一个函数,可以交换两个整形变量的内容
//错误写法
#include <stdio.h>
void Swap(int x, int y)
{
	int z = 0;
	z = x;
	x = y;
	y = z;
	//z是一个空瓶子,x倒进z,y倒进x,z倒进y
}

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	//交换
	printf("交换前:a=%d b=%d\n", a, b);
	Swap(a, b);
	printf("交换后:a=%d b=%d\n", a, b);

	return 0;
}


//正确写法
#include <stdio.h>
void Swap(int *px, int *py)
{
	int z = *px;
	*px = *py;
	*py = z;
}

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	//交换
	printf("交换前:a=%d b=%d\n", a, b);
	Swap(&a, &b);
	printf("交换后:a=%d b=%d\n", a, b);

	return 0;
}

 3.什么时候需要传地址,什么时候不需要传地址(此接上一条)

例如add函数就不需要传地址,因为数据传过去只是单纯相加,不对传过去的数据进行修改,而swap函数不仅需要得到数据还需要修改数据。

4.一个工程中可以有多个.c文件,但是只能有一个main函数,因为main函数是程序的入口。

5.函数拒绝接收参数

#include<stdio.h>
void test(void)//明确拒绝100
{
	printf("hehe\n");
}
int main()
{
	test(100);
	return 0;
}

6.main函数有三个参数(后续再学)

7.把定义的函数(Add)放到后面时,代码虽然可以运行。但是编译器会出现“Add”未定义的警告

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	//加法
	int sum = Add(a, b);
	printf("%d\n", sum);

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

8.如果想要把函数定义在后面,就需要在前面对函数进行声明,声明函数的返回类型、名称、参数的类型、个数,参数名称可加可不加,但是函数定义才真正决定函数是否存在

//函数的声明
int Add(int, int);

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	//加法
	int sum = Add(a, b);
	printf("%d\n", sum);

	return 0;
}
//函数的定义
int Add(int x, int y)
{
	return x + y;
}
//以上在现实中不这样写

9.函数的声明一般要放在头文件中。

在“头文件”中创建“add.h”,在“源文件”中创建“add.c”,这两个称为一个加法模块

进行函数声明即可使用Add函数

一个工程分成多个.h和.c文件,实现模块化,便于协作。

(注意:自己定义的头文件用“”,自带的头文件用<>,他俩的区别后续学)

10.如何将自定义的函数编译成静态库(将“add.c”编译成静态库,变成二进制,不再是代码)

首先新建一个工程,命名为“add”,添加“add.c”和“add.h”。(如果是编写好直接拷贝进去,右击“头文件”和“源文件”)

然后运行,会报错(没关系),在add文件夹中会找到add.lib的文件,该文件就是编译出来的静态库,.pdb文件就是这个静态库的编译文件。

出于对代码的保护,这样别人就无法得知自定义的函数是如何实现的,如果想使用,需要将静态库添加到所需工程文件存放路径下(通俗来说跟源文件一个目录),再将头文件添加到工程中,以及写一行代码,如下图所示

11.每一次函数的调用都会在栈区上申请空间;

stack overflow:栈溢出

12.作业小tips

(1)if语句中,0表示假,非0表示真

(2)switch语句中default字句可以放到任意位置;

switch语句中case字句不要求顺序;

char也是整型家族的,因为字符存储的时候,存储的是ASCII值;

(3)return没有办法一下返回两个值

//这个写法只能返回一个值——4
#include<stdio.h>
int test()
{
	return(3, 4);//加不加括号都是一个逗号表达式
}
int main()
{
	int ret = test();
	printf("%d\n", ret);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值