一:流程控制
今天我学流程控制啦!练习了三种程序流程控制3小时。在学习的过程中,我看到了一句话“顺序,分支,循环可以描述任何的算法。”看来如何把问题用,顺序,分支,循环去描述了就可以说是一个问题的算法了。说明啦!流程控制需要大量的去练习各种算法了。所以这个要学好只有狠下功夫了哦!
二:函数
1:函数的声明:函数返回值 函数名(形式参数类型........)
{
函数的代码块
如果需要的话,还需要return (表达式)
}
2:函数的作用:把细节封装啦!因为你需要1个功能的函数,只要看此函数的声明就知道了。因为一般好的函数的函数名都很有涵义,一看就知道他是做什么的了,实现了模块化编程。而且函数可以重复的用,就像吃饭的碗啊!只要没坏,每顿饭都可以拿同一个碗来装饭。而且啊!每个“碗”也是独立的,洗完的时候是一个一个洗的,有些“脏(bug)”1点就多洗下啦!
3:形参和实参:函数定义的时候所接受的参数叫形参;调用函数时候给函数的值是实参。
3:函数的运行机制:
值传递:
void change(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
int main(void)
{
int i =0;
int j =1;
change(i, j);
printf("i=%d", i);
printf("j=%d", j);
return (0);
}
嘿嘿!我想呢!这样就交换了2个变量的值啦!但是结果很郁闷啊!并没有交换!怎么回事啊!干脆调试1下看看喏!
现在马上就要进入交换函数了哦!
哦!原来是这样啊!看看啊!形参a,b和实参ij的地址是不一样的啊!交换的只是复制品!克隆人!仔细看,实参和形参原来只是值一样,地址不一样的哦!如果交换的只是形参和实参一点关系都没有啊!就像好多坏孩子,她想要诅咒人,她就去买个小娃娃,把这个小娃娃当着是她讨厌的人!然后每天不停的对着这个娃娃去诅咒,以为这样就可以让别人倒霉。唉!其实她的诅咒一点作用都没有!我以前以为真的有用呢,现在学了函数,我觉得真的没用的哦!o--o!以前的scanf为什么要取地址原来也是这个原因啊!
既然函数是这样子交互的,那就可以总结1下函数的调用过程了!
1:参数的复制(把“仇人的主要特征用“本本”记下来”)
2:保存返回地址(当买了“娃娃”后,担心自己不是那么的坏,或者有一天会把“娃娃”送给商家!所以记下商家的详细地址!)
3:开辟内存空间(当买了个”娃娃“后,它就会占用一定的宇宙空间啊)
4:规划局部变量(然后给"娃娃"打扮下,让看起来更像那个人,而且准备好"道具"去诅咒它!画个圈圈什么的,呵呵!)
5:执行函数体代码(然后就开始“诅咒”啦!)
6:撤销内存空间(嗯!诅咒累了!唉!觉得这样真的不是好孩子啊,还是把娃娃送还给商家啦!)
7:取得返回地址(突然有一天意识到这样做是不正确的,就准备把“娃娃”送还给商家了!所以拿出以前"本本"记下的商家详细地址!)
8:参数的内存空间撤销(唉!既然要重新做个好孩子,那么把以前的那个“本本”也仍了吧!)
三:仍“本本”的人(参数的内存空间撤销---vc6.0中在Project Settings中的c/c++的Calling convention中设置(又叫调用约定))
仍“本本”的这个事啊,其实也可以有几种方式了呢!
1:把这个本本让商家帮我“仍”了吧!这样“商家”(函数的调用方)就知道以前是个坏孩子,现在要该过自新!这样,“商家”就可以见证我的改过了哦!而且商家也知道了这个孩子以前坏在哪里,买了几个娃娃(参数个数)这样下次这个孩子又想买娃娃的 时候,说不定她更坏了啊,要买很多个娃娃,所以商家把娃娃的货进得老足老足的了。要多少个都可以(printf,scanf多参函数)!—— _cdecl
2;3: _fastcall和_stdcall 这2个方式呢!仍“本本”就自己去仍了,这样丢脸事还是不告诉别人的好。嘿嘿!