一个知道可以实现但不知道细节的问题.

tigeroar 2003-06-17 03:50:13
我想在一个函数的传入参数里传入N个一维数组.这里的N不确定.
但是N个数组的维数都是想同的.哪位同志知道如何实现还请帮忙.
谢谢!
...全文
14 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluedodo 2003-06-19
  • 打赏
  • 举报
回复
UP
zteliubin 2003-06-18
  • 打赏
  • 举报
回复
赞成mrzz(zz先生) ,应该是不错的方法了,
或者
function(type* p,int n,int *m);
n是确定的,如果固定的,可以#define.....,就不用传了,
m是每个一维数组的长度,再定义一个一维数组来保存,
调用时传入,这样不用判断越界问题了。
主程序里计算每个一维数组长度。


tigeroar 2003-06-18
  • 打赏
  • 举报
回复
我觉得MRZZ先生的第一种方法可以实现,但是作起来较复杂,请问有没有更好的办法?
yhz 2003-06-18
  • 打赏
  • 举报
回复
一般来说,都是用传指针和维数的方法了。

反而我觉得这才是“标准”的C语法---因为C里面数组名和指针是一样的。

你用int a[5]作为参数,实际上等于int *a。
区别只是在于前者你已经定义了维数,而后者则要你自己定义维数而已。
pzytony 2003-06-17
  • 打赏
  • 举报
回复
up
mrzz 2003-06-17
  • 打赏
  • 举报
回复
楼上的也对,但好像表达不太清楚,我来解释一下:
function(type* p,int n,int m);
可以完成题主愿望!type是参数类型可以是int,long,float,...
数组传入函数后实际上只有首地址传入了,维数信息丢失了,
实际上维数信息在编译期有效,运行时C不知数组有多大(考虑到
效率的问题,如果每次都检查是否越界,会牺牲很多时间,所以
C将维数问题留给了程序员),n,m是数组维数,使用的时候可以
用n,m完成对数组的索引和检查。比如
访问:*p[m*i+j];
检查:if(m*i+j)>=m*n){错误;return}

另外如果题主的意思不是二维数组,而是离散的一维数组,那么问题又
变了,这样的问题可以采用变参数结构或链表的方法解决。
变参数的方法为function(intn,type*p,...);
类似于printf函数,用va_arg,va_start,va_end等宏完成读取(请参阅相关文档)。
链表的方法为:将离散数组做成一个链表,然后将链表作为参数传给函数。
hpho 2003-06-17
  • 打赏
  • 举报
回复
fn(type p[][m],n);

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧