二维结构体数组名做参数的函数调用问题。

newline 2002-07-23 07:23:32
二维结构体数组定义为

struct Luv
{
float L;
float u;
float v;
} LuvArray[1000][1000];

欲定义一个函数Normalize(定义参数),
使得调用Normalize(调用参数),对数组进行操作。

请问其中的定义参数和调用参数应该怎么写?
...全文
293 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
newline 2002-07-24
  • 打赏
  • 举报
回复
感谢大家,尤其感谢秋水沉舟,帖子分不多,可回答得很详细,令人感动。
哦,程序在BCB6下编译通过,没问题。
ibmer 2002-07-23
  • 打赏
  • 举报
回复
用一维或者二维指针都可以,最好用二维指针,因为实参是二维数组的名称,是个二维指针:

struct Luv
{
float L;
float u;
float v;
} LuvArray[1000][1000];
void Normalize(Luv** ptr,int i,int j)
{
for(int ii=0;ii<i;ii++)
for(int jj=0;jj<j;jj++)
{
ptr[ii][jj]...
.......
}
}

main()
{
Normalize(LuvArray,1000,1000);
......
}

wlz47 2002-07-23
  • 打赏
  • 举报
回复
void Normalize(struct Luv par[][1000])

更好更复杂的方法是用模板:
template<int size1, int size2>
void Normalize(Luv (&array)[size1][size2])
{...}

这样对任意二维数组(不过是1000×1000,还是5×7,或是别的)都可以使用该Normalize函数

不过要注意的是上述模板函数的顺利通过要在编译器对C++标准支持的比较好才行,VC6下可能就通不过编译,更不用说别的古董级编译器了

下面是例子和测试:编译器为g++,编译环境为Dev-C++ 4.9.4.1
#include <iostream>
#include <stdlib.h>

using namespace std;

struct Luv
{
float L;
float u;
float v;
};

template<int size1, int size2>
void Normalize(struct Luv (&array)[size1][size2])
{
for(int i=0; i<size1; ++i)
for(int j=0; j<size2; ++j)
{
array[i][j].L = 1.0;
array[i][j].u = 1.0;
array[i][j].v = 1.0;
}
}

const int DIM1 = 3;
const int DIM2 = 5;

int main()
{
Luv sl[DIM1][DIM2]; // DIM1 × DIM2 的二维数组

Normalize(sl);

for(int i=0; i<DIM1; ++i)
for(int j=0; j<DIM2; ++j)
cout << "sl[" << i << "][" << j << "] = {"
<< sl[i][j].L << ", "
<< sl[i][j].u << ", "
<< sl[i][j].v << "}\n" ;

system("PAUSE");
return 0;
}

再次强调,由于对C++标准支持的不够好,VC6下上述代码不能通过编译,VC7也许可以,不过偶没试过
天外飞狐 2002-07-23
  • 打赏
  • 举报
回复
用一个二级指针来操作

69,371

社区成员

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

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