如何在C ++中找出二维int数组的大小?

时间:2012-09-09 04:01:29

标签: c++ arrays multidimensional-array sizeof

我遇到涉及二维数组的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 个答案:

答案 0 :(得分:4)

无法“找到”指针在C或C ++中指向的大小。指针只是一个地址值。您必须传入大小 - 或者在您的情况下将行数或列数传入addTables函数 - 如:

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

这就是为什么评论员建议像vector这样的东西。 C ++提供比原始指针更好的数据类型 - 一方面,矢量跟踪它包含的项目数,因此它不必作为单独的参数传递。

在您的示例程序中,sizeof运算符返回所提供变量类型的大小。因此,对于sizeof(tablePtr),它返回int**的大小,该大小可能是4或8个字节。 sizeof操作在编译时进行评估,因此无法知道tablePtr指向的缓冲区有多大。