版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言—函数麦洛克菲—周扬荣面向对象和面向过程面向过程:procedure
oriented
programming
POP面向对象:object
oriented
programming
OOP面向过程是分析解决问题的步骤,然后用函数把这些步骤一步一步的实现,然后在使用的时候一一调用则可面向对象是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。下雨的时候,人们为了防止被雨淋打开伞避雨:面向过程:下雨了,我打开了伞,挡雨rain(雨);open(我,伞)prevent(伞,雨)面向对象:对象:我伞雨
行为:雨下,我打开伞,伞挡雨rain,me,umbrellarain.fall();me.open(umbrella)面向过程是把问题分解成若干步骤,每个步骤实现一个函数,一步步实现,然后在使用的时候,把数据传递给这些函数,计算得出结果面向对象是首先抽象出各种对象,把数据和解决问题的方法封装在对象中,然后各个对象之间通过行为发生作用函数(FUNCTION)定义在C语言中,把为了实现某一特定的功能的所有语句归纳在一起,就形成了一个函数。比如将两个数进行交换,求两个数中的最大数,将整数转换为字符串,这些功能都可以通过函数来实现。一般来说,函数只实现单一功能。如果一组代码是为了实现一个单一功能,则归纳出来,形成一个函数。比如求2个数中的最大值的语句如下:int
x;int
y;int
max;if
(x>y)
max
=
x;else
max
=
y;那么把这些语句归纳一下,就可以写成下面的函数:int
max(int
x,
int
y){int
max;if
(x>y)
max
=
x;else
max
=
y;return
max;}void
func(void){printf(“Hello
world\n”);return;}函数定义形式与调用int
add(int
x,
int
y){int
result
=
x+y;return
result;}int:返回值类型,void
add:函数名(命名风格:下划线或者单词第一个字母大写)x,y:参数--输入,输出,输入输出,变参函数,无参数用voidint
main(void){int
a
=
1;int
b
=
7;int
ret
=
0;ret
=
add(a,b);printf("ret:%d\n",
ret);}Main的参数int
_tmain(int
argc,
_TCHAR*
argv[]){}函数应用,多次与多重调用,头文件int
add(int
x,
int
y){int
tmp;tmp
=
x
+
y;returntmp;}int
GetMax(int
x,
int
y){int
max;if(x>y)max=x;else
max
=y;return
max;}void
print_x(int
x){printf(“%d\n”,
x);return;}void
print_hello(void){printf(“hello
world!\n”);}求最大值判断一年是不是润年求小写字母交换2个数函数定义注意事项功能单一一般不超过300行输入输出变量初始化严进宽出assert使用时间与空间复杂度边界考虑函数的功能测试return语句不可返回指向“栈内存”的“指针”或者
“引用”,因为该内存单元在函数体结束时被自动释放。模块化设计思想一个函数尽可能实现且只实现一个功能(不要把多个功能放在一个函数里)一个函数的长度1.包括版权版本声明、作者调试者测试者标注、函数说明及代码中的注释等等不超过200行2.纯代码行数不超过100行传参传值,无法改变实参void
Func1(int
x){x=1;//x是a的拷贝}传指针(传地址),可以改变实参void
Func2(int
*x){*x=2;//x是a的地址,*x就是a}传引用,可以改变实参void
Func3(int
&x){x=3;//x就是a}//为什么有3种传递方法?int
main(int
argc,
char*
argv[]){int
a=0;//a是实参
Func1(a);//传值
printf("%d\n",a);Func2(&a);//传指针
printf("%d\n",a);Func3(a);//传引用
printf("%d\n",a);printf("Hello
World!\n");return
0;}swap—交换void
swap1(int
x,
int
y)//传值{int
tmp=x;//x,y是a,b的拷贝
x=y;y
=
tmp;}void
swap2(int
*x,
int
*y)//传指针{int
tmp=*x;//x,y是a,b的地址*x=*y;//*x就是a,*y就是b*y
=
tmp;}void
swap3(int
&x,
int
&y)//传引用{int
tmp=x;//x就是a,y就是bx=y;y
=
tmp;}void
main(void){int
a
=
10;int
b
=
20;swap1(a,b);//传值
printf(“a=%d,b=%d\n”,a,b);a=10;b=20;swap2(&a,
&b);//传指针
printf(“a=%d,b=%d\n”,a,b);a=10;b=20;swap3(a,b);//传引用
printf(“a=%d,b=%d\n”,a,b);return;}数组做函数参数int
a[]int
(&a)[10]int
test_array(inta[],size_t
len){sizeof(a);}调用约定调用约定参数传递栈平衡调用约定类型cdeclstdcallfastcallthiscallnakedcall调用约定(CallingConvention)stdcall调用约定声明的格式,驱动默认的是stdcall调用约定:int
stdcall
func(int
x,inty)stdcall的调用约定意味着:参数入栈规则:参数从右向左压入栈还原栈者:被调用函数自身修改栈//默认的C调用约定//明确指出C调用约定int
func
(int
x
,inty)int
cdecl
func
(int
x,int
y)该调用约定遵循下面的规则:参数入栈顺序:从右到左cdecl调用约定又称为C调用约定,是C语言缺省的调用约定,它的定义语法是:还原栈者:调用者修改栈,所以可以支持变参函数,因为能够恢复栈平衡fastcall的声明语法为:int
fastcall
func
(int
x,int
y)该调用约定遵循下面的规则:参数入栈顺序:函数的第一个和第二个参数通过ecx和edx传递,剩余参数从右到左入栈还原栈者:被调用者修改栈thiscall是C++类成员函数缺省的调用约定,但它没有显示的声明形式。thiscall意味着:参数入栈:参数从右向左入栈this指针入栈:如果参数个数确定,this指针通过ecx传递给被调用者;如果参数个数不确定,
this指针在所有参数压栈后被压入栈。栈恢复:对参数个数不定的,调用者清理栈,否则函数自己清理栈。nakedcall…实际例子进一步学习缓冲区溢出-栈溢出void
msg_display(char
*
buf){char
msg[200];strcpy(msg,buf);cout<<msg<<endl;}局部变量区老ebp返回地址(eip)参数1…参数nebpesp栈增长方向内存增长方向思考?为什么传值不能改变实参,而传指针和引用可以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年幼儿园好玩的雪
- 2026糖尿病黑豆食用注意事项课件
- 2026年资料员之资料员专业管理实务通关题库带答案详解(考试直接用)
- 2026 幼儿情绪管理主动情绪引导课件
- 2026年中级注册安全工程师之安全生产技术基础每日一练及参考答案详解【培优】
- 2026年投资建设项目决策题库附答案详解(黄金题型)
- 2026年中医皮肤科题库检测试卷附答案详解(精练)
- 2025云南能投威信煤炭有限公司招聘100人笔试历年典型考点题库附带答案详解
- 2025云南省农村信用社联合社中层管理人员选聘13人笔试历年典型考题及考点剖析附带答案详解
- 2025云南民爆集团有限责任公司缺员岗位社会招聘(2人)笔试历年备考题库附带答案详解
- 网络综合布线进线间子系统概述
- 耳穴压豆完整版本
- 2024贵州贵阳中考物理试题及答案 2024年中考物理试卷
- 特发性肺纤维化急性加重AEIPF诊治指南
- DB11-T 1938-2021 引调水隧洞监测技术导则
- WB/T 1045-2012驶入式货架
- GB/T 4295-2019碳化钨粉
- 文化管理学自考复习资料自考
- 三年级下册《对鲜花》音乐教案冯雨婷
- 使用拐杖操作流程及评分标准
- 基金会财务报表审计指引
评论
0/150
提交评论