作者tomore (小Q)
看板C_and_CPP
标题Re: [问题] 二维阵列利用函式改内容
时间Mon Sep 28 17:21:32 2009
※ 引述《larryho (新人伟)》之铭言:
: 请问一下各位大大,在C程式里面,我现在在主程式中(main)里有
: 一个存放字元的二维阵列(假设这样 A[2][2] ),如果我想要用函式
: 的方式去更改或整里里面的内容,例如使用气泡排序法去排序,这
: 样的话我应该如何使用call by reference的方式去做?(主要问题在
: 该传什麽形式的指标给函式(*ptr? *ptr[]?),还有函式内的指标不知
: 如何控制二维阵列(++ptr or what?))
: 第二个问题,如果这样做的话,以一个良好的程式设计习惯来说,到
: 底好还是不好?因为直接用函式直接更改资料,感觉上有点不是很好
: 可是万一资料量太大,如果又再设一个空间给它放,又怕会爆掉~
: 感谢各位的解答,新手问题,请多多包涵~
依你的问题写个简单范例给你参考
void sort(int *ptr,int size){
//*ptr=array[0]
//*(ptr+1)=array[1]
ptr++;
//*ptr=array[1]
//*(ptr+1)=array[2]
}
int main(){
const int size;
array[size];
sort(&array[0],size); // 传递阵列的初始位址及阵列大小
system("pause");
return 0;
}
或许你会分不清什麽是取值或取位址
指标所储存的内容是位址而不是值
所以在指标前加上* 就是显示这个指标指向的位址中的值
如果没加上*就只是单纯的显示这个指标目前指向的位址
而在变数前加上&则是取位址的意思
不知道这样解释你会不会比较清楚一点
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.30.10.154
1F:推 ledia:他问的是二维阵列呢。 09/28 17:24
2F:→ tomore:二维阵列跟一维阵列还不是都一样是连续的记忆体位置 09/28 17:30
3F:推 ledia:那你的观念真的要好好调整一下了 XD 09/28 18:19
4F:→ tomore:小的不材 可以请ledia大指点一下哪里有问题吗 谢谢 09/28 19:15
5F:推 snowlike:二维*(*(ary+i)+j)或许你认为是相同的*(*ary+k),但是 09/28 20:11
6F:→ snowlike:因为资料型态不同,所以在参数列就没办法match 09/28 20:11
7F:→ james732:资料型态不同 但是在记忆体里的摆法好像是相同的? 09/28 20:21
8F:推 ledia:C 里面不直接传二维阵列, 只会传指向 const 大小阵列的指标 09/29 00:16
9F:→ ledia:因为你可以用 malloc 做出二维阵列, 而编译器不能因此就假定 09/29 00:16
10F:→ ledia:所有二维阵列都是连续的 09/29 00:17