Home » 未分类 » Linux C 学习笔记 九

Linux C 学习笔记 九

函数结构

 

/*

*函数说明

*/

类型说明符 函数名(形参列表)

参数说明

 

形式参数:在定义函数时,函数名后面括号中的变量名称为形式参数

实际参数:在函数调用时,函数名后面括号中的表达式称为实际参数

函数的返回值决定于函数定义时的返回类型。

在被定义的函数中必须执行函数的行参类型。

声明 :int fun(参数列表);参数列表的变量名可以不写,但要写出类型。

定义 :

int fun(参数列表)

函数的实现。。。。

 

 

传值调用

int swap(int x,int y);

swap(a,b);

 

传址调用

int swap(int *x,int *y);

swap(&a,&b);

 

只需要取值来进行运算取得结果时,使用传值调用

需要对于原数据进行诙谐的情况,使用传址调用

 

使用指针作为函数参数传递即为传址调用是错误的说法。

 

void swap_(int *x,int *y) //可能会发生溢出

{

*x = *x + *y;

*y = *x – *y;//x ===>y

*x = *x-*y;//y >===x;

}

void swap_3(int *x,int *y) 推荐使用

{ //x:1010 y:0101

*x = *x ^ *y;

*y = *x ^ *Y;

*x = *x ^ *y;

}

swap_2(int *x,int *y) 可能会有溢出,不能等于0

{ //x:10 y:2

x* = *x * *y ;

y=*x/*y;

*x=*x/*y;

 

}

 

 

函数说明(声明):包括函数名,函数类型,和函数参数类型,可不指定行参名。

 

在函数调用中

#include<stdio.h>

int fun1(int n)

{

return n;

}

int fun2(int n)

{

// printf(“in fun2()\n”);

}

int main(void)

{

int res1 = fun1(100);

int res2 = fun2(100);

 

printf(“res1:%d\n”,res1);

printf(“res2:%d\n”,res2);

 

return 0;

}

 

当注释掉printf(fun2)这句时,输出为100100,打印的res原本的fun1return 寄存器的结果,

当不注视时,输出为100 10,而这里打印的是fun2调用printfprintfreturn 寄存器的结果,也就是printf打印的字符总数。

 

返回过程中,首先将返回结果保存至return 寄存器,永远不会被清空,都是覆盖。

不使用return 语句,返回结果为最后一次使用return 寄存器的结果。

 

在设计函数的时候记得主调调被调这样的过程越少越好。因为栈空间会越来越深。—-注意考虑递归过程

 

ADT和黑盒

 

黑盒测试分类:

正确性

可用性

边界检查

性能测试: 3s以下是比较好的,3-5s是可以接受的,>5s用户就要来找你!

压力测试

兼容性测试

网络安全

 

完整性?

方法:穷举法,

 

白盒测试

从源代码入手,每个逻辑分支都必须测试,每个分支都运行至少一边,检查算法,溢出,优化等等问题。

ADT:抽象数据类型(abstract data type):用于描述生活中的一些抽象的数据类型

 

 

 

问题一:

Char *strcpy() char* strcpy()有什么区别 ——没区别

char *deschar* src又有什么区别 ——没区别

 

问题二:

char *str1=”hello”

char *str2=NULL; ——一定要给指针一段空间才可以赋值。指向为空是不能赋值的。

*str2++ = *str1++

 

递归:函数直接或者间接的调用自己。

递归出口

递归过程

 

This entry was posted in 未分类. Bookmark the permalink.