作者xflash96 (Will)
看板b97902HW
标题Re: [计程] 阵列简介 III (微甲爆了心情不好发文害 …
时间Sat Nov 15 09:48:19 2008
我以前的英文老师说过:「语言最要的地方就是能完整的传达意思,对方听得懂就好」
传递阵列(以其为引数),函式要知道一些事情才能处理:
1. 引数类型
2. 阵列的offset位移
程式在对二维变数存取时
int a[2][3];
a[1][2] = *(*(a+3*1)+2)
a[0][1] = *(*(a+3*0)+1)
如同sa之前的实验
int b[2];
b[1] = 1[b] = *(1+b)
应该只是单纯的代换
所以处理二维变数的时候需要知道至少最後一维的值
处理 n维 n-1维
所以宣告函数
void func(int a[][]);
传入时函数把a当作pointer处理,自然不知a阵列的大小(函式说:虾米?沙西米?)
实际上,sizeof(a)在函式里==sizeof(pointer)
(sizeof 的值其实在compile时就决定了!所以他不知你执行时会传多大的阵列)
所以要宣告void func(int a[][3])
才能作阵列存取
*那麽,我宣告void func(int b[2]), 就可以sizeof了吗?
A: X. 那只是写好玩的。阵列和pointer不同,阵列是const pointer,所以大小有保证。
pointer可以接不同的阵列,就像是函数引数可以接不同的变数,大小没保证
以我的经验,在openCV里传2维变数,其实要传
void func(int width, int height, int depth, char *array);
depth满像变数型态
即话为一维变数,存取时用
*(*(array+depth*width*i)+height*j)
另在我写embedded时的经验,有人用
struct array
{
int a[3][3];
};
直接传struct
另学长joseph给的解法:
用c++ vector
另学长的学长给的解法:
比赛时就用global就好了嘛!
只不过真的写程式时最好不要global满天飞
以上
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.124.83.64
1F:推 anfranion:第一次看你发教学文XD 11/15 17:54
2F:推 dennis2030:推 原PO是隐强者XD 11/16 20:39
3F:→ anfranion:原PO可是真‧隐强者XD 11/17 19:48