免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 12812 | 回复: 31

[函数] 请教 二维数组(的指针?)作为函数参数的问题 [复制链接]

论坛徽章:
0
发表于 2007-10-25 13:57 |显示全部楼层
我曾试图直接使用简单类型指针来作为函数参数,都不成功
按错误说,就是指针类型不一致
可行的方案如下:
  1. void display(int(* array)[4],int n){...}
  2. display(arr,4);   //arr为一个二维数组名
复制代码


提问,只有这种方法可以实现吗?这样的话,参数里面的数组元素数目是指定的,如题为4
这样只能处理[4]的数组了,能用简单的指针传递吗?如display(int* p,int n)
更多维呢?
3q~

论坛徽章:
0
发表于 2007-10-25 14:04 |显示全部楼层
可以在传递的时候别传递数组名,把数组名赋值给一个指针变量,然后把指针变量传过去。

论坛徽章:
0
发表于 2007-10-25 14:09 |显示全部楼层
原帖由 cugb_cat 于 2007-10-25 14:04 发表
可以在传递的时候别传递数组名,把数组名赋值给一个指针变量,然后把指针变量传过去。

你这里指的指针变量是什么类型的?能否把赋值语句写出来,偶参考下

论坛徽章:
0
发表于 2007-10-25 14:11 |显示全部楼层
原帖由 perljoker 于 2007-10-25 13:57 发表
我曾试图直接使用简单类型指针来作为函数参数,都不成功
按错误说,就是指针类型不一致
可行的方案如下:
void display(int(* array)[4],int n){...}
display(arr,4);   //arr为一个二维数组名


提问, ...


还可以使用void display(int array[][4], int n)这种方式.

论坛徽章:
0
发表于 2007-10-25 14:17 |显示全部楼层
原帖由 scutan 于 2007-10-25 14:11 发表


还可以使用void display(int array[][4], int n)这种方式.

恩,这样和我那种写法实质上是一致的吧
仍然是没法解决扩展性问题啊,还有其他方式否?

论坛徽章:
0
发表于 2007-10-25 14:23 |显示全部楼层
传array[0][0]的地址可否?

论坛徽章:
0
发表于 2007-10-25 14:26 |显示全部楼层
原帖由 perljoker 于 2007-10-25 14:17 发表

恩,这样和我那种写法实质上是一致的吧
仍然是没法解决扩展性问题啊,还有其他方式否?


最后的方法就是将二维数组视为一维数组的方式来解决了.

论坛徽章:
0
发表于 2007-10-25 14:27 |显示全部楼层

回复 #1 perljoker 的帖子

为什么不这样用呢?
void display(int **array,int n){...}
display(arr,4);   //arr为一个二维数组名

论坛徽章:
0
发表于 2007-10-25 14:34 |显示全部楼层
原帖由 dreamwood 于 2007-10-25 14:27 发表
为什么不这样用呢?
void display(int **array,int n){...}
display(arr,4);   //arr为一个二维数组名


这种方法就是最容易用错的一种方法.
int **是指向指针的指针类型.
arr是一个二维数组的类型.

int arr[][10];
int **p = arr;
这种方式的错误也是同样的.
应该是
int (*p)[10] = arr;

论坛徽章:
0
发表于 2007-10-25 14:39 |显示全部楼层

回复 #8 dreamwood 的帖子

我试验过了,不能那么做,如果那样简单就好了……
报错为:cannot convert `int (*)[4]' to `int**' for argument `1' to `void display(int**, int)'

最后的方法就是将二维数组视为一维数组的方式来解决了.

怎么个解决法?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP