NTUEE113HW 板


LINE

然後今天来讲个 传址 ( call by address ) 要讲这个,就要先讲个 传值 ( call by value ) 所谓的传值,就是最普通呼叫函数时,传入 parameters 的方法 例如:( 以下为片段 code ) int max(int a,int b) { if(a>b)return a; return b; } main() { int num1,num2; cout<<num1<<num2; cout<<max(num1,num2); } 好,相信大家对 call by value 已经熟到快焦掉了 切入正题 call by address 顾名思义 就是呼叫一个 function 的时候,传的不是值,而是 address 例如:( 以下为片段 code ) void func(int *num) { *num *= *num; } main() { int x=4; func(&x); cout<<x; } 还记得吗? &x 是对 x 取址,然後 *num 是对 num 取值。 当我们呼叫了 func 这个函式的时候,依上面的 code 会同时执行 int *num = &x; 这个动作 因此,当我们在 func 里对 *num 动手动脚 就等於对 main 里的 x 动手动脚 呃…所谓动手动脚就是指改变值的意思 上一篇我们讲到 阵列就是指标 所以 其实我们也可以传阵列的 address 给 function 像这样: void print_array(int *myArray,int size) { for(int i=0;i<size;i++) cout<<myArray[i]<<endl; } main() { int s[]={1,4,3,2,5}; print_array(s,5); system("pause"); } 其实 int *myArray 也可以写成 int myArray[] 喔 ( 代表我们传入的是一个阵列 ) 以上在呼叫 print_array 时,会执行这个动作 int *myArray = s; 来点应用吧~ 上面的 code 可以写成 void print_array(int *start,int *end) { while(start<=end) cout<<*start++<<endl; } main() { int s[]={3,4,2,9,1}; print_array(s,s+4); system("pause"); } 这里补充一个上一篇没讲到的东西 int a[]={10,12}; int *ptr=a; 那 cout<<*ptr++<<endl; cout<<*ptr; 结果会是[同电桥]什麽? 答案是 等价於以下的写法 cout<<*ptr<<endl; ptr++; //也就是 ptr=ptr+1 cout<<*ptr; 於是结果是 10 12 所以要让 ptr 所指向的 address 所存的值递增 1 要这样写 (*ptr)++; 然後上面那个邪恶板的 print_array 看的懂的话就表示你已经对指标出神入化了XD 看不懂的话…也不用太担心啦…(不过期中 or 期末可能会出现 (?)) 总觉得我讲得一篇比一篇难懂… Orz -- ╭═══╤═══╮ ╰═╮ ╭═╯ │ │ │╭═和平,土地,面包═╮ │ │ │ ╭═╧╧╮╤═╤═╮═╤═╤╧╮ │ │ │ │ ││ │ │ │ │ │ ╰═╤═╯ │ │ ││ │ │ │ │ │ │ ╰╧╯╰═══╯╰ ╰ ╰ ╰ ╰ ╰ ─╯ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.239.191
1F:推 jim1029:头推,还蛮白话的吧 11/20 00:14
2F:推 b98901056: 推汤米大神的经典文!! 请问C++可以指定指向位置吗?? 11/20 00:16
3F:→ jim1029:最後一个为什麽麽自动换行啊 11/20 00:17
4F:推 concise:唷呼~ 汤米好帅 11/20 01:15
5F:→ TommyKSHS:回三楼 因为我写错了 XD 11/20 01:30
※ 编辑: TommyKSHS 来自: 140.112.239.191 (11/20 01:30)
6F:→ TommyKSHS:二楼可以说的再具体一点吗? thx 11/20 01:31
7F:推 b98901056:我想要一个pointer指到我要的记忆体位置 可吗? 11/20 01:43
8F:推 a088753349:终於PO了~(泣...) 11/20 02:06
9F:推 hanmicky36:推~~神! 11/20 03:47
10F:→ TommyKSHS:回 056: 这方面我就不太了解了。 11/20 07:50
11F:→ TommyKSHS:但是要指向一个记忆体位置 前提是那个位置有被allocate 11/20 07:52
12F:→ TommyKSHS:不然对它取值的时候会爆炸… 11/20 07:53
13F:推 schimtag168:惠斯同电桥的梗不错xdd 11/20 13:11
14F:推 b98901056:喔了了 THX 我想要指别的程式allocate的 11/23 09:57
15F:→ TommyKSHS:这麽高深的技术我不会阿 XD 11/23 19:41
16F:推 b98901056:不是啦XD 假如我已经pop出一个0x1111ffff好了 11/24 01:40
17F:→ b98901056:那我有办法用C+的pointer要他指到这个位置吗@@(诚心) 11/24 01:41







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灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP