Wednesday, 2nd,Mar, 2022
//函数的调用
如果函数内部的数想操纵函数外部的数,那就需要用到传址
如果仅仅是为了把值传过去用一下,那用传值就可以
//1.写一个函数可以判断一个数是不是素数
要打印100-200之间的素数
函数返回1,是素数,返回0不是
函数设计最好保持它单一功能的独立性,不要一堆都往上加
优化:
开平方即可sqrt()
//写一个函数来判断是不是闰年
注意:别忘记写返回类型
如果一个函数不写返回类型,则默认返回int类型
写void是代表不需要返回
以上是错误的,漏了1600,在第一层if就已经被返回了,而不能进入第二个if
最妙的是当用逻辑判断时,可以直接利用真为1,假为0
直接当作return来返回
//写一个函数,实现一个整形有序数的二分查找
这里找不到不是返回0,是因为数组下标是从0开始的,0也有可能是要找元素的数组下标
但不可以在函数内计算数组元素个数,
因为传参传的是数组的第一个的地址,int a[]本质上是一个地址int*a
此时的sizeof(a)为一个地址的大小为4字节(int型)
所以int se= sizeof(a)/sizeof(a[0])=4/4=1 (a[0]为下标为0的元素)
所计算的元素个数为1,错误
所以不可以在函数内部计算数组数,
其数组数必须在函数外部计算好再传参,这个函数的参数有3个
int ret = binary_search(arr,key,se)
函数int binary_search(int a[],int k, int s) 中:
int a[]不用写a[10]因为传参前并不知道数组是什么样
数组传参的本质:传递数组首地址
所以,函数内部如果需要数组的元素个数,一定要在外部计算好再传参
//4.写一个函数,每调用一次这个函数,就会将num的值增加1
要用函数内部链接函数外部-地址调用
//函数的嵌套调用和链式访问
//函数不能嵌套定义的,必须各独立,但是可以嵌套调用
//函数的链式访问
printf函数的返回类型为int型
它返回的值是打印在屏幕上字符的个数
最内层printf直接打印43
中间的printf,因为此时已打印出的字符为43,2个字符,所以,打印出2
最外层的printf,因为此时收到的打印出的2,1个字符,所以打印返回1
因此这句代码最终返回值为4321
//函数的声明和定义
程序的执行是按照从上至下的顺序来的,
所以函数的定义如果在主程序后,前面要使用的话,就需要声明一下
1.声明只是告诉你有一个函数,但是不代表这个函数的定义是存在的
函数的存在取决于函数的定义
2.定义也相当于是一种更强有力的声明,所以定义在前面时就不需要再声明
3.一个程序是几个模块拼起来的
每个模块都有一个自己的文件
最后集成在一个文件内使用相关函数时需要表明引用来源-即头文件
函数声明放在头文件里
即 #include "add.h" 就相当于 声明: int Add(int x, int y);
是否一定要创建头文件?
有了头文件别人只能引用,你的源(版权)还是你的,
改成静态库,可以用二进制乱码隐藏定义具体代码,而将声明(头文件)给引用人即可
声明放在头文件里
定义放在源文件里
头文件和源文件的区别表现在:后缀不同、内容不同。
1、后缀不同
后缀为.h的文件是头文件。
后缀为.c的文件是源文件,内含函数实现,变量定义等内容。
2、内容不同
头文件用来写类的声明 (包括类的成员的声明和方法声明)、函数原型、#define常数等。
源文件主要写实现头文件中已经声明的那些函数的具体代码。
头文件的组成
头文件一般由四部分内容组成:
(1)头文件开头处的版权和版本声明;
(2)预处理块;
(3)inline函数的定义;
(4)函数和类结构声明等。
在头文件中,用ifndef/define/endif结构产生预处理块,用#include格式来引用库的头文件。头文件的这种结构,是利用C语言进行开发软件所通常具备的,属于公有知识。