最近使用VS2008编写程序时,遇到了如何引用结构体数组作为函数形参问题。
现将主要代码粘贴如下(结果如图所示),来达到传递结构体数组到函数中的目的:
--main.cpp--/
#include "Point.h"
#include<iostream>
#include<fstream>
using namespace std;
typedef struct //定义结构体
{
int num;
float x;
float y;
float z;
}Position;
void PassData(Position (&P)[5]);//声明函数
///
void ReadData(char*fname)//Read file's data
{
Position PointN[5];
for (int i=0;i<5;i++)//数组初始化
{
PointN[i].num=0;
PointN[i].x=0;
PointN[i].y=0;
PointN[i].z=0;
}
fstream out;
out.open(fname,ios::in);
while (!out.eof())
{
for (int i=0;i<5;i++)//从文档中读入数据至数组
{
out>>PointN[i].num;
out>>PointN[i].x;
out>>PointN[i].y;
out>>PointN[i].z;
}
}
out.close();
PassData(PointN);//传递结构体数组数据到函数中显示
}
///
void PassData(Position (&P)[5])//Read file's data
{
for(int i=0;i<5;i++)
{
cout<<P[i].num<<" "<<P[i].x<<" "<<P[i].y<<" "<<P[i].z<<endl;
}
}
///
int main(int argc, char* argv[])
{
ReadData("1.txt");
system("Pause");return 0;
}
数据及运行结果如图:
问题:为什么“引用”时需要限定数组大小?答案:
如果参数是数组的引用,那么编译器不会将它转换为指针,而是直接传递数组本身,也就是说,数组的长度不可省略,编译器将检查传入函数的实际数组参数的长度和函数的形式参数的长度是否匹配。
/*************************************初学C++,有不正之处还望赐教!****************************/
参考:http://zhidao.baidu.com/link?url=eFwmfcjawrI_qjeYPp8qFABzZRi6V3s44SprAZJ5YyAhEi_SqAVHsoi9A2opJLoVOdVj_oo8tkK7LXm01HwwY_