0
点赞
收藏
分享

微信扫一扫

c- language- learning 12函数 函数调用 链式访问 声明和定义

天悦哥 2022-03-11 阅读 131

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语言进行开发软件所通常具备的,属于公有知识。

 

 

举报

相关推荐

0 条评论