⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000006.htm

📁 一份很好的linux入门资料
💻 HTM
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;<A HREF="mailto:ax.bbs@bbs.ee.nthu.edu.tw.">ax.bbs@bbs.ee.nthu.edu.tw.</A>&nbsp;(athena),&nbsp;信区:&nbsp;test&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;星星流讲座&nbsp;0013&nbsp;<BR>发信站:&nbsp;☆清华电机☆&nbsp;(Sun&nbsp;May&nbsp;14&nbsp;12:17:37&nbsp;1995)&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>第&nbsp;3&nbsp;讲&nbsp;之&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;基本的输出与输入&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Topic:&nbsp;Addressing&nbsp;Operator&nbsp;&amp;&nbsp;casting&nbsp;<BR>&nbsp;<BR>C&nbsp;语言中提供了直接取得变数位址&nbsp;(address)&nbsp;的方法,什麽是变数&nbsp;<BR>的位址呢?我们知道变数是用来储存资料用的,那麽,在程式执行&nbsp;<BR>的时候,这些资料又是被放在那儿的呢?没错,就是放在主记忆体&nbsp;<BR>(Main&nbsp;Memory)&nbsp;中。由於主记忆体很大,所以电脑必须以一种比较&nbsp;<BR>有效率的方法来迅速地取得记忆体中的资料,目前所有的电脑都是&nbsp;<BR>使用定址&nbsp;(addressing)&nbsp;的方式来管理记忆体。定址简单地说,就&nbsp;<BR>是把主记忆分成一个一个的小区域&nbsp;(通常以&nbsp;byte&nbsp;为单位)&nbsp;,然後&nbsp;<BR>替每个小区域编定一个「地址」。等到要存取资料时,就可以根据&nbsp;<BR>地址去找出资料来,这个「地址」我们就管它叫「位址」。&nbsp;<BR>&nbsp;<BR>C&nbsp;语言由於提供了直接取得变数位址的方法,所以它也被某些人称&nbsp;<BR>为「中阶语言」,这是因为它同时具有高阶语言的语法和低阶语言&nbsp;<BR>才有控制和操作位址的能力。那麽要如何取得变数位址呢?它的方&nbsp;<BR>法有两种:一种是使用取址运算子&nbsp;&amp;&nbsp;(Address&nbsp;Operator)&nbsp;,另一&nbsp;<BR>种是使用指标&nbsp;(pointer)。在此我们先介绍如何使用取址运算子。&nbsp;<BR>&nbsp;<BR>取址运算子的方法很简单,请看下面的□例程式:&nbsp;<BR>&nbsp;<BR>/*&nbsp;address.c&nbsp;*/&nbsp;<BR>#include&nbsp;&lt;stdio.h&gt;&nbsp;<BR>&nbsp;<BR>void&nbsp;main&nbsp;(void)&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&quot;%p\n&quot;,&nbsp;(void&nbsp;*)&amp;a);&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>执行结果:&nbsp;<BR>&nbsp;<BR>effffd0c&nbsp;<BR>&nbsp;<BR>这个程式在不同的机器上有不同的执行结果&nbsp;(在相同的机器上也可&nbsp;<BR>能有不同的执行结果&nbsp;:)&nbsp;)&nbsp;,这是因为变数在执行时所被放置的位&nbsp;<BR>址会有变动,这是作业系统操作导致的关系。&nbsp;<BR>&nbsp;<BR>上面的程式中比较值得注意的就是这一行:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&quot;%p\n&quot;,&nbsp;(void&nbsp;*)&amp;a);&nbsp;<BR>&nbsp;<BR>%p&nbsp;表示印出的是变数的位址,而&nbsp;&amp;a&nbsp;表示的就是&nbsp;a&nbsp;这个变数的位&nbsp;<BR>址,所以&nbsp;&amp;&nbsp;被叫做取址运算子,就是取得变数位址的意思。那麽&nbsp;<BR>(void&nbsp;*)&nbsp;这个东西是做什麽用的?这个东西叫做强制型态转换&nbsp;(&nbsp;<BR>explicit&nbsp;type&nbsp;conversion,某些原文书中把它简称为&nbsp;casting)&nbsp;<BR>。为什麽要做强制型态转换呢?我们在前面曾经说过,传给函数的&nbsp;<BR>参数,它的型态必须和函数原型中规定的相同才行。万一型态不相&nbsp;<BR>同的时候,那该如何是好呢?这时候就必须使用强制型态转换了。&nbsp;<BR>强制型态转换的方法非常简单,只要在欲转换的变数前面加上用小&nbsp;<BR>括号括起来的型态就可以了。例如上面的程式中,我们要把&nbsp;&amp;a&nbsp;<BR>的型态转成&nbsp;void&nbsp;*&nbsp;的型态&nbsp;(void&nbsp;*&nbsp;是一个指标型态,指标型态&nbsp;<BR>以後将专文讨论),那麽就只要写&nbsp;(void&nbsp;*)&amp;a&nbsp;就完成强制型态转&nbsp;<BR>换了。以下是另一个比较简单的使用强制型态转换的程式:&nbsp;<BR>&nbsp;<BR>/*&nbsp;type.c&nbsp;*/&nbsp;<BR>#include&nbsp;&lt;stdio.h&gt;&nbsp;<BR>&nbsp;<BR>void&nbsp;main&nbsp;(void)&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a&nbsp;=&nbsp;20;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;direct&nbsp;assign&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&quot;%f\n&quot;,&nbsp;(float)a);&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>执行结果:&nbsp;<BR>&nbsp;<BR>20.000000&nbsp;<BR>&nbsp;<BR>我们把&nbsp;a&nbsp;的型态强制转换成&nbsp;float,然後就可以在&nbsp;printf&nbsp;中使&nbsp;<BR>用&nbsp;%f&nbsp;的方式把&nbsp;a&nbsp;以浮点数的方式印出。上面的程式中同时也示&nbsp;<BR>□了直接给定变数初值的方法。&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>本文原作者为徐振家,原作刊载於星星神教总坛&nbsp;☆清华电机☆&nbsp;test&nbsp;板。&nbsp;<BR>你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。&nbsp;<BR>原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。&nbsp;<BR>未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。&nbsp;<BR>其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。&nbsp;<BR>对本文有任何疑问或意见请&nbsp;mail&nbsp;给&nbsp;<A HREF="mailto:ax.bbs@bbs.ee.nthu.edu.tw,谢谢。">ax.bbs@bbs.ee.nthu.edu.tw,谢谢。</A>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -