C++ 从函数C+传递指针+;

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

我有一个文本文件,在其中我读入一个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数组中的函数。我想将一个指针从该函数传递到指向数组第一个元素地址的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;
}