C++ 从函数C+传递指针+;
我有一个文本文件,在其中我读入一个2D数组,如下所示:C++ 从函数C+传递指针+;,c++,arrays,function,pointers,C++,Arrays,Function,Pointers,我有一个文本文件,在其中我读入一个2D数组,如下所示: 153 62 328 71 0.998263 0 0 0 0 0 0 0 0 0 160 58 335 67 0.99699 0 0 0 0 0 0 0 0 0 192 43 362 53 0.998 0 0 0 0 0 0 0 0 0 224 34 389 45 0.994047 0 0 0 0 0 0 0 0 0 我只需要前四列。我创建了一个将数字存储到2D数组中的函数。我想将一个指针从该函数传递到指向数组第一个元素地址的ma
153 62 328 71 0.998263 0 0 0 0 0 0 0 0 0
160 58 335 67 0.99699 0 0 0 0 0 0 0 0 0
192 43 362 53 0.998 0 0 0 0 0 0 0 0 0
224 34 389 45 0.994047 0 0 0 0 0 0 0 0 0
我只需要前四列。我创建了一个将数字存储到2D数组中的函数。我想将一个指针从该函数传递到指向数组第一个元素地址的main
在main函数中,我尝试增加指针索引以再次从数组中获取值,但无法获取正确的数字。显然,我对2D数组指针的理解是有限的,我非常感谢任何帮助
我的代码在这里:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <typeinfo>
#include <string>
#include <cstring>
using namespace std;
///////////////////////////////////////////////////////////////////////////////
int lines_in_pos_obj_file(int i = 0)
{
string pos_obj_file_line;
ifstream pos_obj_file("correspondencePOS000_sphere.txt");
if(pos_obj_file.is_open())
{
while(getline(pos_obj_file, pos_obj_file_line))
{
i++;
}
}
else cout << "Unable to open file";
return(i);
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
int *get_pos_obj_positions(int k)
{
int pos_obj_positions[k][4];
int i = 1;
string pos_obj_file_line;
ifstream pos_obj_file("correspondencePOS000_sphere.txt");
if(pos_obj_file.is_open())
{
pos_obj_file >> pos_obj_positions[0][0] >> pos_obj_positions[0][1] >> pos_obj_positions[0][2] >> pos_obj_positions[0][3];
while(getline(pos_obj_file, pos_obj_file_line))
{
pos_obj_file >> pos_obj_positions[i][0] >> pos_obj_positions[i][1] >> pos_obj_positions[i][2] >> pos_obj_positions[i][3];
i++;
}
}
else cout << "Unable to open file";
int (*pos_obj_pointer)[4] = &pos_obj_positions[0];
return(pos_obj_pointer[0]);
}
///////////////////////////////////////////////////////////////////////////////
int main()
{
int pos_obj_lines;
int *pos_obj_positions;
pos_obj_lines = lines_in_pos_obj_file(0);
pos_obj_positions = get_pos_obj_positions(pos_obj_lines);
for(int l = 0; l < pos_obj_lines; l++)
{
cout << pos_obj_positions[l] << endl;
}
return 0;
}
返回指向局部变量的指针
int pos_obj_positions[k][4]代码>。函数完成时,变量将被销毁
在main
中分配数组,并将其传递给get\u obj\u pos\u positions
函数 我建议您将2D数组作为输入参数而不是返回值传递。或者最好还是用向量
void get_pos_obj_positions(int k, int pos_obj_positions[][4])
{
int i = 1;
string pos_obj_file_line;
ifstream pos_obj_file("correspondencePOS000_sphere.txt");
if(pos_obj_file.is_open())
{
pos_obj_file >> pos_obj_positions[0][0] >> pos_obj_positions[0][1] >> pos_obj_positions[0][2] >> pos_obj_positions[0][3];
while(getline(pos_obj_file, pos_obj_file_line))
{
pos_obj_file >> pos_obj_positions[i][0] >> pos_obj_positions[i][1] >> pos_obj_positions[i][2] >> pos_obj_positions[i][3];
i++;
}
}
else cout << "Unable to open file";
}
int main()
{
int pos_obj_lines;
int **pos_obj_positions;
pos_obj_lines = lines_in_pos_obj_file(0);
pos_obj_positions = new int[ pos_obj_lines ];
for ( int I = 0; I < pos_obj_lines; I++ ) {
pos_obj_positions = new int[4];
}
get_pos_obj_positions(pos_obj_lines,pos_obj_positions);
return 0;
}
void get_pos_obj_positions(整数k,整数pos_obj_positions[][4])
{
int i=1;
字符串位置对象文件行;
ifstream pos_obj_文件(“respondencepos000_sphere.txt”);
if(pos_obj_file.is_open())
{
位置对象文件>>位置对象位置[0][0]>>位置对象位置[0][1]>>位置对象位置[0][2]>>位置对象位置[0][3];
while(getline(pos_obj_文件,pos_obj_文件行))
{
pos_obj_文件>>pos_obj_位置[i][0]>>pos_obj_位置[i][1]>>pos_obj_位置[i][2]>>pos_obj_位置[i][3];
i++;
}
}
否则CUT考虑使用向量的向量,例如“代码> STD::向量< /代码>;或者使用一个普通数组(或者一个普通向量),访问一个[V*i+j] < /代码>,而不是<代码> t[i] [j] < /代码>…并且请缩进代码,使其适合(不超过72个字符宽)。如果启用所有警告,大多数编译器会警告您。(例如g++-Wall-g
)
void get_pos_obj_positions(int k, int pos_obj_positions[][4])
{
int i = 1;
string pos_obj_file_line;
ifstream pos_obj_file("correspondencePOS000_sphere.txt");
if(pos_obj_file.is_open())
{
pos_obj_file >> pos_obj_positions[0][0] >> pos_obj_positions[0][1] >> pos_obj_positions[0][2] >> pos_obj_positions[0][3];
while(getline(pos_obj_file, pos_obj_file_line))
{
pos_obj_file >> pos_obj_positions[i][0] >> pos_obj_positions[i][1] >> pos_obj_positions[i][2] >> pos_obj_positions[i][3];
i++;
}
}
else cout << "Unable to open file";
}
int main()
{
int pos_obj_lines;
int **pos_obj_positions;
pos_obj_lines = lines_in_pos_obj_file(0);
pos_obj_positions = new int[ pos_obj_lines ];
for ( int I = 0; I < pos_obj_lines; I++ ) {
pos_obj_positions = new int[4];
}
get_pos_obj_positions(pos_obj_lines,pos_obj_positions);
return 0;
}