菜鸟提问:二维数组的参数传递

sefule 2009-04-07 05:39:23
经典菜鸟问题:
今天用到二维数组的参数传递问题,下面的代码没有通过,不知道为什么.
<code>
void arrrayprint( float**parr, int r, int c )//这里不想用parr[][2]做参数
{
float *p = (float*)parr;
for( int i = 0; i < r; i++ )
{
for( int j = 0; j < c; j++ )
{
cout<<*(p + i*r + j)<<",";
}
cout<<endl;
}
}

int main()
{
float a[][2] =
{
{1.0f,2.0f},
{3.0f,4.0f}
};
arrrayprint(a,2,2);//错误提示这里不能将a[2][2]给float**parr
return 0;
}
</code>
另外,我是想用c#调用非托管c++的dll,传递一个二维数组参数.
在dll里面用vector来做成二维,不知道大家有没有什么好办法能更好的实现参数传递.(不使用数据库之类的作中介)
...全文
156 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqls_xqls 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dizuo 的回复:]
C/C++ code其实二维数组本质就是一维数组,
void arrrayprint( float *parr, int r, int c )//这里不想用parr[][2]做参数
{
float *p = (float*)parr;
for( int i = 0; i < r; i++ )
{
for( int j = 0; j < c; j++ )
{
cout <<*(p + i*r + j) <<",";
}
cout <<endl;
}
}

int main()
{
float a[][2] =
{
{1.…
[/Quote]

ryfdizuo 2009-04-07
  • 打赏
  • 举报
回复
其实二维数组本质就是一维数组,
void arrrayprint( float *parr, int r, int c )//这里不想用parr[][2]做参数
{
float *p = (float*)parr;
for( int i = 0; i < r; i++ )
{
for( int j = 0; j < c; j++ )
{
cout <<*(p + i*r + j) <<",";
}
cout <<endl;
}
}

int main()
{
float a[][2] =
{
{1.0f,2.0f},
{3.0f,4.0f}
};

arrrayprint(a[0], 2, 2);//
return 0;
}
wanjingwei 2009-04-07
  • 打赏
  • 举报
回复
顶楼上的
old-six-programmer 2009-04-07
  • 打赏
  • 举报
回复
经典的疑问
<<c专家编程>>里面说的很清楚
有时候,数组和指针并不等待

具体到楼主的问题就是
float** 和 float[2][2]的类型并不匹配
没错,c语言中,当数组作为参数传递的时候,数组名会退化为指针
但是,也只能保证一级指针的退化,没有所谓的n层指针退化
如果我们以指针退化的视角去看,一级指针退化
那么float[2][2]退化为float(*)[2],可以如下声明

void arrrayprint( float(*parr)[2], int r, int c )
  • 打赏
  • 举报
回复
只知道parr[][2]可以传2维数组,你为何非得找其它用法呢?
不是所有的写法都有备选的.
sefule 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mfkdyq 的回复:]
void arrrayprint( float**parr, int r, int c )//这里不想用parr[][2]做参数
{
float *p = (float*)parr;
for( int i = 0; i < r; i++ )
{
for( int j = 0; j < c; j++ )
{
cout < <*(p + i*r + j) < <",";
}
cout < <endl;
}
}
float *p = (float*)parr;应该改为 float *p = *parr;
[/Quote]
似乎没有作用.
woods2001 2009-04-07
  • 打赏
  • 举报
回复
jf
S_zxing 2009-04-07
  • 打赏
  • 举报
回复
顶一个
mfkdyq 2009-04-07
  • 打赏
  • 举报
回复
void arrrayprint( float**parr, int r, int c )//这里不想用parr[][2]做参数
{
float *p = (float*)parr;
for( int i = 0; i < r; i++ )
{
for( int j = 0; j < c; j++ )
{
cout < <*(p + i*r + j) < <",";
}
cout < <endl;
}
}
float *p = (float*)parr;应该改为 float *p = *parr;

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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