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