Как узнать размер двумерного массива int в C ++?

У меня проблема с программой на C ++, включающей двухмерные массивы.

В рамках программы мне нужно использовать функцию, которая принимает в качестве параметров две таблицы и добавляет их, возвращая другую таблицу.

Я подумал, что мог бы сделать что-то вроде этого:

int** addTables(int ** table1, int ** table2)
{
int** result;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
result[i][j] = table1[i][j] + table2[i][j];
}
}
return result;
}

но я не знаю, как узнать размер таблицы (строк и столбцов) для моих циклов for.

У кого-нибудь есть идеи, как это сделать?

Это часть кода, который я тестировал, но я не получаю правильное количество столбцов и строк:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main(int argc, char **argv)
{
const int n = 3; // In the addTables function I'm not supposed to know n.
int **tablePtr = new int*[n]; // I must use double pointer to int.
for (int i = 0; i < n; i++)
{
tablePtr[i] = new int[n];
}

srand((unsigned)time(0));
int random_integer;

for(int i = 0; i < n; i++) // I assign random numbers to a table.
{
for (int j = 0; j < n; j++)
{
random_integer = (rand()%100)+1;
tablePtr[i][j] = random_integer;
cout << tablePtr[i][j] << endl;
}
}

cout << "The table is " << sizeof(tablePtr) << " columns wide" << endl;
cout << "The table is " << sizeof(tablePtr) << " rows long" << endl;

return 0;
}

Я ценю любую помощь и, пожалуйста, имейте в виду, что я новичок в C ++.

1

Решение

Не существует способа «найти» размер того, на что указывает указатель в C или C ++. Указатель — это просто значение адреса. Вы должны были бы передать размер — или в вашем случае количество строк или столбцов в addTables функция — как:

int** addTables(int ** table1, int ** table2, int rows, int columns)

Вот почему комментаторы предлагают что-то вроде vector, C ++ предлагает лучшие типы данных, чем необработанные указатели — во-первых, вектор отслеживает количество элементов, которые он содержит, поэтому его не нужно передавать как отдельные параметры.

В вашем примере программы sizeof Оператор возвращает размер типа предоставленной переменной. Таким образом, для sizeof(tablePtr) он возвращает размер int** что, вероятно, будет 4 или 8 байтов. sizeof операция оценивается во время компиляции, поэтому нет способа узнать, насколько большой буфер tablePtr указывает на это.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]