NTUE-CS102 板


LINE

指标。 先附样东西 照今年猜题内容写的code http://www.mediafire.com/?jknoozzu2zl 各自取用。 -- 来讲解指标...这部份讲解请打开下页的的Book1.xls 首先,请想像整个表单是已经被分块的记忆体样貌 : 也就是指每个格子都代表某个变数使用的空间 空白的可能是未使用,或是其他变数的位置,就先当作是平常说「未宣告区块」那种状况 打开以後应该都是在Sheet1这 直接看,你会看到B3、J11各有个765465 这里把B3视做一个int变数,名称为A,位址当然就是B3、存放的内容是"765465" 再来看J11,姑且称为变数B,表面上都是765465,但是当你选取这格时 你会看到其实储存格内容是"=B3",像这样就是指标的用法 也就是,由一个变数B,去"向"被"记"的另一个变数A这样 所以修改显示值也好,移除数值也好,其实都是针对A在处理 这里的B只是一个中继点去表示A而已 对B做处理,最多最多就是我去把他标记的位置从B3移到B5这样而已 -- Book1.xls http://www.mediafire.com/?jknoozzu2zl 这也是为什麽说,在同一个函式里面用指标通常是很蠢的事情 在自己面前有块饼乾,伸手就能拿来吃,干嘛没事还要叫人家帮忙拿呢? 所以说,这个指标就是用在函式间的连结 可能隔壁房间有我要找的东西,可是我现在忙着写教学没办法过去拿 因此,我请一个路人帮我拿过来给我 像这样的情况才会变得比较有意义 -- 回到主题来,继续讲一下指标的用法 int A; int *B; 这个*B的*,就是表示宣告为指标,至於指标为什麽还要特别指定型态这点 晚点会提到。 因为B这个名字,表示J11这个位址,而B只能存放另一个位址 : 请回头看Book1.xls 所以是不能用 B=A; 这样的写法的,因为这样是想把A里头765465放到B中 而不是把A的位址(B3)放进B,正确的写法是 B=&A; &A即取得A的位址,然後利用=传入B里头 -- 这里你可能会误写成 *B=A; 这样的行为当然是成立的,因为写成*B 就会令*B等同B所标记的位址 (变成那个位址上的变数) 在此例中,因为没有预设指定位址,所以会发生"不可预期的结果"这样 好,初步说明到这个阶段,再来是个小小的程式码 利用指标,从主函式传值到副函式输出、改变数值後,再回到主函式输出 -- #include<iostream> using namespace std; void print(int *a) { cout <<&a <<endl; *a=6 } int main() { int b=2; print(&b); cout <<b; } -- 输出结果是 2 6 这样,这里附带重新提一下 使用函式时副上的参数数 可以视为函式使用时是 int *a=&b 这样的状况,这样记也许比较能够避免错误 下页是阵列 -- 这里可以翻到sheet2了 对於阵列与指标的关系,大致上可以说"阵列名称"就是指标 也就是呢...宣告一个阵列时,就只是指定一串记忆体为特定变数型态 然後由一个指标指定起点 比如说sheet2中 C2到H2就是一串阵列A : 画成横的感觉比较顺,所以请不要挑剔(跑) 在电脑中只会去记忆&A=C2,然後每个变数占用的记忆体单位 这也是为什麽我们的阵列初始从A[0]开始用,表示从被记录的位址数起第零个 所以说,在传阵列到函式时 用法会是 void funtion(int *point){;} int main(){ int name[10]; funtion(name); } -- 因为name 表示的就是一个位址,所以不用对name取位址(不用写成&name) 就能让函式内参数顺利接受这个位址 到这边都不是问题...吧(?) 对於这个阵列如何在函式内使用... 大概可以分成 1.照基本概念走 从位址起算 *(point+n) n为任意整数 2.当一般阵列用 point[n] n为任意整数 随意举个例 *point 等价於 point[0] *(point+1) 等价於 point[1] 以下类推。 -- 下一项是利用指标传二维阵列进函式 这部份先继续参照sheet2 C6:H8这段范围 就当作我宣告int array[3][6];,表示这个二维阵列的样子这样 当然,传进去不能像一维那样使用,不然就没什麽好说的了 这里先有个基础,不论宣告几维阵列或阵列大小,在给予记忆体空间时一定是一串的 : 请翻到sheet3,C6:T6这整段才是array[3][6]在记忆体的样子,而不是分布在C6:H8 而作为起点的位址也还是只有一个 C6,不会因为三列而有三个起点 可是,这个阵列大小是不会随着函式被传递的 不能说传进一个起点,就要函式能主动判断几列几行 : 利用指标控制阵列时,脑袋不清楚很容易用到不该使用的范围,请多加注意 所以说...要在宣告时告诉函式每一个子阵列的起点分别在哪 -- 这部份的作法是:宣告一串一维阵列摆指标,然後让指标放各个阵列的起点 这样一个摆放指标的阵列,称为指标阵列 宣告方法是 (*point)[6] ^^^^^^ ^^ 变数名称 阵列大小 这个变数名称会再被传入的数值取代,构成一个二维函式 或许换个方式说成是宣告N个占用6单位记忆体的变数更能理解...? : 拿回sheet3看,就是有一个变数代表C2:H2这段,下个变数表示I2:N2...(下略) 与 *point[6]不同,解释会变成 ^^ ^^^^^^^^ 指标 一维阵列 →→ 放六个指标的一维阵列 在意义上就有些不同了 正确用法如下 void funtion(int *point)){;} funtion(name); -- 好像没什麽好写的 就先这样好了(思) -- 违背命运是人之常情。   人们从在犯了错之後,才向神明祈祷以求补偿。                   狼与辛香料 克拉福‧罗伦斯 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.114.76.199
1F:推 dosomethnig:GOOD 01/08 19:34
2F:推 gcobc12632:我想直接把以前全部写的作业都带过去 然後慢慢参考= = 01/08 19:56
3F:推 Arashinoon:未看先推 01/08 23:22
4F:→ j2612280:我发现错误啦!! 第六页的cout <<a <<endl;是印出住址 01/12 20:33
※ 编辑: game0416 来自: 58.114.76.199 (01/12 21:08)
5F:→ j2612280:呃..我说的是输出结果不是2啦~是住址才对 01/13 00:03
6F:→ game0416:输出内容才是那段的目的啊qq 01/13 00:11







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP