我也要学C语言-第八章:流程控制与函数机制

Posted on 2011-05-25 13:02  dodolook  阅读(2564)  评论(49编辑  收藏  举报

一:流程控制

  今天我学流程控制啦!练习了三种程序流程控制3小时。在学习的过程中,我看到了一句话“顺序,分支,循环可以描述任何的算法。”看来如何把问题用,顺序,分支,循环去描述了就可以说是一个问题的算法了。说明啦!流程控制需要大量的去练习各种算法了。所以这个要学好只有狠下功夫了哦!

二:函数

  1:函数的声明:函数返回值 函数名(形式参数类型........)

         {

              函数的代码块

              如果需要的话,还需要return (表达式)

          }

  2:函数的作用:把细节封装啦!因为你需要1个功能的函数,只要看此函数的声明就知道了。因为一般好的函数的函数名都很有涵义,一看就知道他是做什么的了,实现了模块化编程。而且函数可以重复的用,就像吃饭的碗啊!只要没坏,每顿饭都可以拿同一个碗来装饭。而且啊!每个“碗”也是独立的,洗完的时候是一个一个洗的,有些“脏(bug)”1点就多洗下啦!

  3:形参和实参:函数定义的时候所接受的参数叫形参;调用函数时候给函数的值是实参。

  3:函数的运行机制

     值传递:

#include <stdio.h>

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个方式呢!仍“本本”就自己去仍了,这样丢脸事还是不告诉别人的好。嘿嘿!