Я пытаюсь получить доступ к значениям, указанным указателями в двумерном массиве двойных указателей, переданных в качестве аргументов функции
float cfun (float **indatav, int rows, int cols)
{
float* *outdatav = new float*[rows];
for (int i=0; i < rows; i++){
outdatav[i] = new float[cols];
}
for (int i=0; i < rows; i++){
for (int j=0; j < cols; j++){
outdatav[i][j] = *(*(indatav[i])[j]);
}
}
return outdatav;
}
Я пробовал несколько вариантов, но ни один из них не работает.Этот вариант кажется мне наиболее правильным, но он не работает, и я не понимаю, почему.Любая подсказка или объяснение будет высоко ценится.
Я знаю, что outdatav[i][j] = indatav[i][j];
с типом возврата float**
может работать, но это не то, что я ищу, потому что в этом случае функция будет возвращать адрес памяти двойных указателей, в то время какЯ ищу значения переменных, указанных этими указателями.
Воспроизводимый пример:
#include <iostream>
#include <vector>
using namespace std;
//float cfun (float **indatav, int rows, int cols)
float** cfun (float **indatav, int rows, int cols)
{
float** outdatav = new float*[rows];
for (int i=0; i < rows; i++){
outdatav[i] = new float[cols];
}
for (int i=0; i < rows; i++){
for (int j=0; j < cols; j++){
outdatav[i][j] = *(*(indatav[i])[j]);
}
}
return outdatav;
}
int main(){
// float indatav[2][2] = {{1.,2.};{3;4}} // WRONG!
float indatav[2][2] = {{1.,2.},{3,4}};// RIGHT!
int rows = 2, cols = 2;
// float y[2][2] = cfun(**indatav, rows, cols); // Try compiling this!
float **y = cfun(indatav, rows, cols); // THIS DOES WHAT YOU ARE AKSING!
return 0;
}
Где y
будет иметь значения {{1.,2.},{3,4}}
.// Обратите внимание на изменения