黑马程序员----C语言函数

</pre><a target=_blank target="_blank" href="——-"></a><pre name="code" class="csharp"><h2 id="函数概述" style="margin: 0.8em 0px; padding: 0px; box-sizing: border-box; font-weight: 100; color: rgb(51, 51, 51); font-family: 'microsoft yahei'; line-height: 26px;"><span style="color: rgb(51, 51, 51); font-size: 14px; font-family: 'microsoft yahei'; line-height: 17px;">——</span><a target=_blank target="_blank" href="http://www.itheima.com/" style="color: rgb(51, 102, 153); text-decoration: none; font-size: 14px; font-family: 'microsoft yahei'; line-height: 17px;">Java培训、Android培训、iOS培训、.Net培训</a><span style="color: rgb(51, 51, 51); font-size: 14px; font-family: 'microsoft yahei'; line-height: 17px;">、期待与您交流! ——-</span>
</h2><h2 id="函数概述" style="margin: 0.8em 0px; padding: 0px; box-sizing: border-box; font-weight: 100; color: rgb(51, 51, 51); font-family: 'microsoft yahei'; line-height: 26px;">函数的介绍</h2><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1.1em; color: rgb(51, 51, 51); font-family: 'microsoft yahei'; font-size: 14px; line-height: 26px;"> 函数的定义<br style="box-sizing: border-box;" />构成c语言程序的基本单元就是函数。函数中包含程序的可执行代码。每个c程序的入口和出口都位于main函数之中。编写程序时并不是将所有内容都放在主函数main中。为了方便规划、组织、编写和调试,一般将一个程序划分为若干个程序模块,每一个程序模块完成一部分功能。</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1.1em; color: rgb(51, 51, 51); font-family: 'microsoft yahei'; font-size: 14px; line-height: 26px;"> <br style="box-sizing: border-box;" />        主函数可以调用其它函数,其它函数也可以互相调用。在main函数中调用其它函数,这些函数执行完毕后又返回到main函数中。通常把这些被调用的函数称为下层函数。函数调用发生时,立即执行被调用的函数,而调用者则进入等待的状态,直到被调用函数执行完毕。 <br style="box-sizing: border-box;" />示例1:</p><pre class="prettyprint" name="code" style="white-space: nowrap; word-wrap: break-word; box-sizing: border-box; margin-top: 0px; margin-bottom: 1.1em; font-family: 'Source Code Pro', monospace; padding: 5px 5px 5px 60px; font-size: 14px; line-height: 1.45; word-break: break-all; background-color: rgba(128, 128, 128, 0.0470588); border: 1px solid rgba(128, 128, 128, 0.0745098); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; position: relative; overflow-y: hidden; overflow-x: auto;"><code class="hljs cpp has-numbering" style="display: block; padding: 0px; background-color: transparent; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal;"><span class="hljs-preprocessor" style="box-sizing: border-box;">#include <stdio.h></span>
<span class="hljs-keyword" style="box-sizing: border-box;">void</span> run()<span class="hljs-comment" style="box-sizing: border-box;">//定义函数run</span>
{
    <span class="hljs-built_in" style="box-sizing: border-box;">printf</span>(<span class="hljs-string" style="box-sizing: border-box;">"run\n"</span>);
}
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> main()
{
    run();<span class="hljs-comment" style="box-sizing: border-box;">//调用函数run</span>
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> <span class="hljs-number" style="box-sizing: border-box;">0</span>;
}</code>

示例1展示了在main函数中如何调用函数,这个函数实现了一个功能,运行结果是:run

函数格式是:

<code class="hljs css has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> 返回值类型  函数名(形式参数列表)
 <span class="hljs-rules" style="box-sizing: border-box;">{
    <span class="hljs-rule" style="box-sizing: border-box;">函数体
 }</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

它包括4个部分: 
 
函数名:就是函数的标识符,命名要遵守标识符的命名规范。 
 
返回值类型:函数的返回值类型就是c语言各种数据类型中的某一种,函数可以没有返回值(在函数名前添加关键词void)。 
 
形式参数列表:可以有多个形式参数也可以没有,函数被调用时实际参数的值将被赋值给相应的形式参数。 

函数体:这部分是函数的核心,这部分程序块实现了某项功能。可以通过c语言各种语法的使用编成一段可执行代码实现某项功能。

示例2:

<code class="hljs perl has-numbering" style="display: block; padding: 0px; background-color: transparent; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal;">void jump()
{
    <span class="hljs-keyword" style="box-sizing: border-box;">printf</span>(<span class="hljs-string" style="box-sizing: border-box;">"jump\n"</span>);
}
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> sum(<span class="hljs-keyword" style="box-sizing: border-box;">int</span> <span class="hljs-keyword" style="box-sizing: border-box;">x</span>, <span class="hljs-keyword" style="box-sizing: border-box;">int</span> <span class="hljs-keyword" style="box-sizing: border-box;">y</span>)
{
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> <span class="hljs-keyword" style="box-sizing: border-box;">x</span> + <span class="hljs-keyword" style="box-sizing: border-box;">y</span>;
}
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> fun()
{
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> <span class="hljs-number" style="box-sizing: border-box;">10</span> - <span class="hljs-number" style="box-sizing: border-box;">9</span>;
}
void test(<span class="hljs-keyword" style="box-sizing: border-box;">int</span> a, <span class="hljs-keyword" style="box-sizing: border-box;">int</span> b)
{
     <span class="hljs-keyword" style="box-sizing: border-box;">printf</span>(<span class="hljs-string" style="box-sizing: border-box;">"<span class="hljs-variable" style="box-sizing: border-box;">%d</span> + <span class="hljs-variable" style="box-sizing: border-box;">%d</span> = <span class="hljs-variable" style="box-sizing: border-box;">%d</span>\n"</span>, a, b, a + b);<span style="color: inherit;">
}</span></code><ul class="pre-numbering" style="color: rgb(51, 51, 51); box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li></ul>

以上我们定义了两个不同的函数,第一个函数无返回值无形参,第二个函数有返回值有形参,第三个函数有返回值无形参,第四个函数无返回值有形参,这些写法都对,不管怎样就是不能不写函数名。 

函数的声明和定义可以分开写,定义可以放在mian函数的后面,但是声明必须放在mian函数的前面,下面举例说明。

示例3:

<code class="hljs axapta has-numbering" style="display: block; padding: 0px; background-color: transparent; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal;"><span class="hljs-preprocessor" style="box-sizing: border-box;">#include <stdio.h></span>
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> <span class="hljs-keyword" style="box-sizing: border-box;">sum</span>(<span class="hljs-keyword" style="box-sizing: border-box;">int</span> a, <span class="hljs-keyword" style="box-sizing: border-box;">int</span> b);
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> main()
{
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> x = <span class="hljs-number" style="box-sizing: border-box;">5</span>, y = <span class="hljs-number" style="box-sizing: border-box;">6</span>;
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> s = <span class="hljs-keyword" style="box-sizing: border-box;">sum</span>(x,y);
    printf(<span class="hljs-string" style="box-sizing: border-box;">"s = %d\n"</span>, s);
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> <span class="hljs-number" style="box-sizing: border-box;">0</span>;
}
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> <span class="hljs-keyword" style="box-sizing: border-box;">sum</span>(<span class="hljs-keyword" style="box-sizing: border-box;">int</span> a, <span class="hljs-keyword" style="box-sizing: border-box;">int</span> b)
{
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> a + b;
}</code>

示例3的运行结果是:s = 11 
函数可以多次声明,只声明不定义的函数编译时可以通过但是链接时会失效。

函数调用

 
常规调用: 
在主函数中利用这条语句:函数名(实际参数列表);就可以调用函数。实际参数要和被调用函数的形式参数类型一致。函数可以先声明,再定义。函数的声明和定义可以分开写。函数是这样声明的:返回值 函数名(形式参数列表); 
如果要将函数定义在main函数后面则要在main函数前面加上这个函数的声明。按照程序自上而下执行的理论,如果前面没有这个函数却在main函数中调用,计算机将找不到这个函数。

示例4:

<code class="hljs axapta has-numbering" style="display: block; padding: 0px; background-color: transparent; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal;"><strong><span class="hljs-preprocessor" style="box-sizing: border-box;">#include <stdio.h></span>
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> main()
{
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> x = <span class="hljs-number" style="box-sizing: border-box;">5</span>, y = <span class="hljs-number" style="box-sizing: border-box;">6</span>;
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> s = <span class="hljs-keyword" style="box-sizing: border-box;">sum</span>(x,y);
    printf(<span class="hljs-string" style="box-sizing: border-box;">"s = %d\n"</span>, s);
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> <span class="hljs-number" style="box-sizing: border-box;">0</span>;
}
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> <span class="hljs-keyword" style="box-sizing: border-box;">sum</span>(<span class="hljs-keyword" style="box-sizing: border-box;">int</span> a, <span class="hljs-keyword" style="box-sizing: border-box;">int</span> b)
{
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> a + b;
}</strong></code>

示例4的这段代码在编译的时候会发出一个警告:warning: implicit declaration of function 'sum' is invalid in C99 
但是仍然可以链接通过生成一个可执行文件。这是因为c语言是个弱语法,语法正确编译器会通过编译和链接生成可执行文件。规范期间我们在写程序时还是要把函数的声明写在main函数前面。

 
嵌套调用: 
函数也可以嵌套调用,即在一个函数中调用另一个函数。比如在自定义的函数中使用printf函数就是嵌套调用函数。下面将举例说明嵌套调用的方式。

示例5:

<code class="hljs axapta has-numbering" style="display: block; padding: 0px; background-color: transparent; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal;"><span class="hljs-preprocessor" style="box-sizing: border-box;">#include <stdio.h></span>
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> <span class="hljs-keyword" style="box-sizing: border-box;">sum</span>(<span class="hljs-keyword" style="box-sizing: border-box;">int</span> x, <span class="hljs-keyword" style="box-sizing: border-box;">int</span> y)
{
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> x + y;
}
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> result(<span class="hljs-keyword" style="box-sizing: border-box;">int</span> x, <span class="hljs-keyword" style="box-sizing: border-box;">int</span> y)
{
   <span class="hljs-keyword" style="box-sizing: border-box;">return</span> <span class="hljs-keyword" style="box-sizing: border-box;">sum</span>(x, y);
}
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> main()
{
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> a = <span class="hljs-number" style="box-sizing: border-box;">9</span>, b = <span class="hljs-number" style="box-sizing: border-box;">2</span>;
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> c = result(a, b);
    printf(<span class="hljs-string" style="box-sizing: border-box;">"c = %d\n"</span>, c);
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> <span class="hljs-number" style="box-sizing: border-box;">0</span>;
}</code>

示例5的运行结果是:c = 11 
注意函数不能嵌套定义。


递归调用: 
递归调用就是函数直接或者间接的调用自己。间接调用就是在递归函数调用的下层函数中再调用自己。

示例6:

<code class="hljs cpp has-numbering" style="display: block; padding: 0px; background-color: transparent; box-sizing: border-box; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal;"><strong><span style="font-family:SimSun;font-size:14px;"><span class="hljs-preprocessor" style="box-sizing: border-box;">#include <stdio.h></span>
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> factorial(<span class="hljs-keyword" style="box-sizing: border-box;">int</span> x)<span class="hljs-comment" style="box-sizing: border-box;">//定义一个函数用来计算阶乘</span>
{
    <span class="hljs-keyword" style="box-sizing: border-box;">if</span> (x == <span class="hljs-number" style="box-sizing: border-box;">1</span>)
    {
        <span class="hljs-keyword" style="box-sizing: border-box;">return</span> <span class="hljs-number" style="box-sizing: border-box;">1</span>;<span class="hljs-comment" style="box-sizing: border-box;">//必须有一个明确的结果,递归才有使用意义</span>
    }
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> factorial(x-<span class="hljs-number" style="box-sizing: border-box;">1</span>)*x;<span class="hljs-comment" style="box-sizing: border-box;">//函数自己调用自己,这句是递归调用的核心</span>
}
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> main()
{
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> a = <span class="hljs-number" style="box-sizing: border-box;">5</span>;
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> b = factorial(<span class="hljs-number" style="box-sizing: border-box;">5</span>);<span class="hljs-comment" style="box-sizing: border-box;">//计算5的阶乘</span>
    <span class="hljs-built_in" style="box-sizing: border-box;">printf</span>(<span class="hljs-string" style="box-sizing: border-box;">"b = %d\n"</span>, b);
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> <span class="hljs-number" style="box-sizing: border-box;">0</span>;
}</span></strong></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">2</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">3</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">4</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">5</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">6</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">7</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">8</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">9</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">10</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">11</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">12</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">13</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">14</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">15</li><li style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; box-sizing: border-box; padding: 0px 5px;">16</li></ul>

示例6的运行结果是:b = 120

参数

形参:定义函数时,函数名后面的参数,比如num1和num2。函数体内部不能定义和形参同名的变量。 一个函数 可以没有形参,也可以有无限个形参。 
实参:调用函数时,传入的具体数据,比如a和b。实参和形参的个数必须相等。 
如果是基本的数据类型作为形参,则是纯粹的值传递,修改函数内部形参的值并不会影响到实参的值。如果传入的是指针变量或者是某个实参的地址,那么在函数内部修改形参的值会影响到实参。下面举例说明。

示例7:

<code class="hljs perl has-numbering" style="display: block; padding: 0px; background-color: transparent; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal;">include <stdio.h>
void test(<span class="hljs-keyword" style="box-sizing: border-box;">int</span> <span class="hljs-variable" style="box-sizing: border-box;">*a</span>,<span class="hljs-keyword" style="box-sizing: border-box;">int</span> <span class="hljs-variable" style="box-sizing: border-box;">*b</span>)
{
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> <span class="hljs-keyword" style="box-sizing: border-box;">x</span> = <span class="hljs-number" style="box-sizing: border-box;">0</span>,<span class="hljs-keyword" style="box-sizing: border-box;">y</span> = <span class="hljs-number" style="box-sizing: border-box;">1</span>;
    <span class="hljs-variable" style="box-sizing: border-box;">*a</span> = <span class="hljs-keyword" style="box-sizing: border-box;">x</span>;
    <span class="hljs-variable" style="box-sizing: border-box;">*b</span> = <span class="hljs-keyword" style="box-sizing: border-box;">y</span>;
}
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> main()
{
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> c = <span class="hljs-number" style="box-sizing: border-box;">5</span>,d = <span class="hljs-number" style="box-sizing: border-box;">9</span>;
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> <span class="hljs-variable" style="box-sizing: border-box;">*p1</span> = &c;
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> <span class="hljs-variable" style="box-sizing: border-box;">*p2</span> = &d;
    <span class="hljs-keyword" style="box-sizing: border-box;">printf</span>(<span class="hljs-string" style="box-sizing: border-box;">"没有调用任何函数:c = <span class="hljs-variable" style="box-sizing: border-box;">%d</span>\td = <span class="hljs-variable" style="box-sizing: border-box;">%d</span>\n"</span>,c, d);
    test(p1,p2);
    <span class="hljs-keyword" style="box-sizing: border-box;">printf</span>(<span class="hljs-string" style="box-sizing: border-box;">"调用完test函数:c = <span class="hljs-variable" style="box-sizing: border-box;">%d</span>\td = <span class="hljs-variable" style="box-sizing: border-box;">%d</span>\n"</span>,c, d);
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li><li style="box-sizing: border-box; padding: 0px 5px;">
</li></ul>

示例7中我们将两个变量的地址传入到函数test中,那么函数test中的指针形参会根据地址找到这两个实参并将它们的值修改。所以示例7的运行结果是: 
没有调用任何函数:c = 5 d = 9 
调用完test函数:c = 0 d = 1

返回值


返回值的使用注意: 
C语言是弱类型的语言,非常不严格。如果没有写清楚返回值的类型,则默认为int型的 。写了void则代表没有返回值,就算明确声明了返回值类型,也可以不返回任何的值。

示例8:

<code class="hljs axapta has-numbering" style="display: block; padding: 0px; background-color: transparent; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal;"><span class="hljs-preprocessor" style="box-sizing: border-box;">#include <stdio.h></span>
<span class="hljs-keyword" style="box-sizing: border-box;">sum</span>(<span class="hljs-keyword" style="box-sizing: border-box;">double</span> a, <span class="hljs-keyword" style="box-sizing: border-box;">double</span> b)
{
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> a + b;
}
<span class="hljs-keyword" style="box-sizing: border-box;">int</span> main()
{
    <span class="hljs-keyword" style="box-sizing: border-box;">double</span> x = <span class="hljs-number" style="box-sizing: border-box;">5.1</span>, y = <span class="hljs-number" style="box-sizing: border-box;">6.2</span>;
    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> s = <span class="hljs-keyword" style="box-sizing: border-box;">sum</span>(x,y);
    printf(<span class="hljs-string" style="box-sizing: border-box;">"s = %d\n"</span>, s);
    <span class="hljs-keyword" style="box-sizing: border-box;">return</span> <span class="hljs-number" style="box-sizing: border-box;">0</span>;
}</code>

示例8的运行结果是:s = 11 
示例8中的函数sum没有明确返回值类型那么默认就是int类型,将两个double型的值传进去返回的是int型的结果。编译时会发出一个警告:warning: type specifier missing, defaults to 'int' 不会报错,编译链接都可以通过,这是c语言的弱类型语言性质决定的。


return 的作用: 
返回一个具体的值给函数的调用者。在主函数中写:return 0; 则意味着主函数结束,退出程序。c语言规定return后面跟0属正常退出,写其它的值也可以退出没有影响,但这不是规范写法。

多文件分工


文件的开头加:#include <.stdio.h> 这条语句,是将系统的头文件拷贝过来。include "abc.txt" 则是把自己写的abc.txt文件中的所用内容以纯文本的方式拷贝到当前位置。 


""表示文件与.c文件处于同一路径,可以使用相对路径也可以使用绝对路径。左边有/的是绝对路径,没有/则为相对路径。通常我们使用相对路径。 
注意自定义的文件使用"",系统文件使用< >。 
 
在实际开发中,当项目比较大时,通常需要多人分工来完成。不同的人在不同的.c文件中写不同的函数实现不同的功能,最后将所有的.c文件一起编译链接。我们知道程序执行的入口是main函数,如何使用其它.c文件中的函数而系统又不会报错或者发出警告呢?这时候就需要用到.h文件。.h文件用来放所有函数的声明,那么只要在main函数前将放有所有函数声明的.h文件拷贝进来,那么在main函数中就能使用其他人在别的.c文件中写的函数了。 
通常在开发中我们会将系统的主头文件(.h)文件拷到main函数之前,这样系统自带的函数库我们才能使用。 
函数的定义放在.c文件中,函数的声明放在.h文件中。如果要是在某个.c文件中用另一个.c文件中定义的函数,只需要包含另一个.c文件对应的.h文件即可。 .h文件只是被别人拿来拷贝包含的,编译链接时不用写出来。当然.h文件中也可以把函数的声明和定义全写了供.c文件拷贝使用,这种情况编译链接时也不用把它写出来。



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值