关于把二维数组的一行当作一维数组传递参数的问题

时间:2021-04-25 18:49:26
double Vertices[3][4];

然后定义
double DistanceToPlane(double *Point1, double *Point2, double *Point3)

Vertices[0] 代表 Vertices[0][0], Vertices[0][1], Vertices[0][2] 这一行吧,

所以我想以 Vertices[0], Vertices[1], Vertices[2] 作为一维数组(二维数组的一行)的首地址,

 DistanceToPlane(Vertices[0], Vertices[1], Vertices[2]);

这样可以吗?


谢谢

10 个解决方案

#1


typedef double double_array[4];
定义:
double DistanceToPlane(double_array *dp1, double_array *dp2, double_array *dp3)

调用:
DistanceToPlane(Vertices, Vertices+1, Vertices+2);

#2


写了一个例子,看看


#include <iostream>
#include <algorithm>
using namespace std;

typedef double double_array[4];

// 求和
double DistanceToPlane(double_array *dp1, double_array *dp2, double_array *dp3)
{
double *p1 = *dp1;
double *p2 = *dp2;
double *p3 = *dp3;
double sum = 0.0;
for (int i = 0; i != 4; ++i)
{
sum += *p1 + *p2 + *p3;
++p1;
++p2;
++p3;
}
return sum;
}

int main ()
{
double Vertices[3][4] = {1.1 ,2.2, 3.3, 4.4,
5.5, 6.6, 7.7, 8.8,
9.9, 10.1, 11.11, 12.12};

    double a;
a = DistanceToPlane(Vertices, Vertices+1, Vertices+2);
cout<<a<<endl;

system("pause");
return 0;
}

#3


typedef double (*p_arr)[4];
double DistanceToPlane(p_arr Point1, p_arr Point2, p_arr Point3)


double DistanceToPlane(double Point[][4])

#4


当然可以!!

#5


可以 写成指针数组 可读性更好

#6


当然可以,楼上的说法飘逸!!

#7



可以, 但是参数多了, 用指针数组更好.

#8


当然可以,虽然a[0]可以当指针用,但不能通过自增或自减运算,例如不能++a[0];但可以*(a[0]+1)

#9


二维数组作为参数自动会转换为 行指针,所以没有必要那么传参数

另外根据楼上的指针数组方法:

我写一一个 

int a[2][3]={ {1,3,5},{45,89,90} };


   int* s[2]={a[0],a[1]};


   cout<<* (s[0]+2);



#10


非常感谢大家 ,学习了

#1


typedef double double_array[4];
定义:
double DistanceToPlane(double_array *dp1, double_array *dp2, double_array *dp3)

调用:
DistanceToPlane(Vertices, Vertices+1, Vertices+2);

#2


写了一个例子,看看


#include <iostream>
#include <algorithm>
using namespace std;

typedef double double_array[4];

// 求和
double DistanceToPlane(double_array *dp1, double_array *dp2, double_array *dp3)
{
double *p1 = *dp1;
double *p2 = *dp2;
double *p3 = *dp3;
double sum = 0.0;
for (int i = 0; i != 4; ++i)
{
sum += *p1 + *p2 + *p3;
++p1;
++p2;
++p3;
}
return sum;
}

int main ()
{
double Vertices[3][4] = {1.1 ,2.2, 3.3, 4.4,
5.5, 6.6, 7.7, 8.8,
9.9, 10.1, 11.11, 12.12};

    double a;
a = DistanceToPlane(Vertices, Vertices+1, Vertices+2);
cout<<a<<endl;

system("pause");
return 0;
}

#3


typedef double (*p_arr)[4];
double DistanceToPlane(p_arr Point1, p_arr Point2, p_arr Point3)


double DistanceToPlane(double Point[][4])

#4


当然可以!!

#5


可以 写成指针数组 可读性更好

#6


当然可以,楼上的说法飘逸!!

#7



可以, 但是参数多了, 用指针数组更好.

#8


当然可以,虽然a[0]可以当指针用,但不能通过自增或自减运算,例如不能++a[0];但可以*(a[0]+1)

#9


二维数组作为参数自动会转换为 行指针,所以没有必要那么传参数

另外根据楼上的指针数组方法:

我写一一个 

int a[2][3]={ {1,3,5},{45,89,90} };


   int* s[2]={a[0],a[1]};


   cout<<* (s[0]+2);



#10


非常感谢大家 ,学习了