У меня есть текстовый файл, в котором я прочитал в 2D массив как это:Передача указателя из функции C++
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-массив. Я хочу передать указатель от этой функции на главную, которая указывает на адрес первого элемента массива.
В основной функции я пытаюсь увеличить индекс указателя, чтобы снова получить значения из массива, но я не могу получить правильные цифры. Очевидно, что мое понимание с помощью указателей 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;
}
Это выход:
153
0
1670302324
32656
-1690506736
1
3
0
6
0
1672415896
32656
Рассмотрите возможность использования векторов векторов, например. 'std :: vector>'; или используйте простой массив (или простой вектор) и получите доступ к 'a [W * i + j]' вместо 't [i] [j]' .... И, пожалуйста, отложите свой код так, чтобы он соответствовал (не более чем 72 символа в ширину). –