C_and_CPP 板


LINE

※ 引述《cheekyboy (唷)》之铭言: : 经过i大指导之後改成为: : #define ROW 1024 : #define COL 1024 : long int output[ROW]; : long int matrix(long int arr[] [COL]); : long int matrix(long int arr[] [COL]) : { : int i,j; : for(i=0;i<ROW;i++) : { : output[i]=0; : for(j=0;j<COL;j++) : { : output[i]=output[i]+ arr[i][j]; : } : output[i]=output[i]/COL; : } : return output[i]; : } : 可是似乎对矩阵使用return不是个聪明的写法,又参考了v大的解说和书本,又改写为 你这样做不是return矩阵, 只是return output矩阵的第[i]的元素.... 而且return时i值为ROW, 实际上你还会存取到超过output[]的位址.... 因为output[]是全域变数, 其实你这边根本可以不用做return的说@_@" : #define ROW 1024 : #define COL 1024 : long int *average[ROW]; : long int *matrix(long int *); : //其中arr位址已知; : long int *matrix(long int *arr) : { : int i,j; : for(i=0;i<ROW;i++) : { : for(j=0;j<COL;j++) : { : average[i] = *(*(arr+i)+j)/COL; : } : } : return average[i]; : } : 又好像怪怪的,还请各位多多指教,话说caller是C语言里的函数吗?? Caller是呼叫某个function的地方, Callee是被呼叫的function.... 它们并不是什麽function, 而是简称使用function的主客体而已.... == 我举几个简单的例子吧, 你的目的是传入某个阵列.... 计算结果之後, 把结果放入一个阵列让Caller能用.... 因为我没看到你的结果可不可以放在传入的阵列去.... 所以这会产生几种不同作法, 我只随便举个几种来.... 另外, 严格来说传入阵列这件事, 只是传了阵列的头的address进去.... 而不是copy一整份阵列; 相对的回传也只是一个address, 不是copy.... 所以下面的例子, 在function被呼叫前, 都要先准备好阵列空间.... 要把整个阵列传一份copy不是不能做, 只是通常没必要也不建议.... == 1. 用全域变数; int result[ROW]; int input[ROW][COL]; void func1(void); // 因为输出入的资料都是全域变数 // 所以根本不需要传入参数或回传 main() { /* 准备input[][]的data */ func1(); } void func1(void) { /* 运算, 并把值assign进result[] */ } == 2. 传入阵列的address以写回结果. void func2(int *output, int (*data)[COL]); // 结果写入第一个参数的address main() { int result[ROW]; int input[ROW][COL]; /* 准备input[][]的data */ func2(result, input); } void func2(int *output, int (*data)[COL]) { /* 运算, 并把值assign进output[] */ } 如果input[][]里的data是可以overwrite的.... 可以直接把原本写进output[]里的结果.... 改写进data[][]里的某一个ROW去.... == 3. function里算完结果并产生一个array.... 然後将产生的array的头的address回传回去.... int* func3(int (*data)[COL]); main() { int *result = NULL; int input[ROW][COL]; /* 准备input[][]的data */ result = func3(input); if(result != NULL) free(result); } int* func3(int (*data)[COL]) { int *output = NULL; output = (int*) malloc(sizeof(int) * ROW); if(output != NULL) { /* 运算, 并把值assign进output[] */ } else { /* 看要不要做错误处理 */ } return output; } 是C++的话, 也可以用new/delete来取代掉malloc/free的pair.... 不过我个人不是很喜欢这种malloc与free出现在不同层的写法.... 4. 真的要传array的话我想到是这样做.... typedef struct _INPUT // input/output的实体在main宣告也行.... { // 但是我懒得再打太多字了说.... int data[ROW][COL]; } INPUT; typedef struct _OUTPUT { int data[ROW]; } OUTPUT; OUTPUT func4(INPUT data); main { INPUT input; OUTPUT result; /* 准备input.data[][]的data */ result = func4(input); } OUTPUT func4(INPUT data) { OUTPUT output; /* 运算, 并把值assign进output.data[] */ return output; } 但是我绝对不建议这麽做....@_@" == 当然应该还有其他方法, 或者上面四种方法也可以混搭组合.... 比如input放在全域等; 不过你的问题重点应该在result/output.... 如果我input的ROW/COL搞反了你就自己换一换吧, 我很容易搞混XD -- 以上, 如果有错漏的, 还请板上大大指正....<(_ _)> --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.174.98
1F:→ VictorTom:第一小段应该是return"阵列", matrix != array....Orz 10/14 22:54
※ 编辑: VictorTom 来自: 220.132.174.98 (10/14 22:58)
2F:→ VictorTom:刚发现, 好像搭配上下篇的typedef, 就不用写struct了XD 10/14 23:30







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

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

TOP