Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++中找到二维数组的大小? 我对一个包含二维数组的C++程序有问题。_C++_Arrays_Multidimensional Array_Sizeof - Fatal编程技术网

如何在C++中找到二维数组的大小? 我对一个包含二维数组的C++程序有问题。

如何在C++中找到二维数组的大小? 我对一个包含二维数组的C++程序有问题。,c++,arrays,multidimensional-array,sizeof,C++,Arrays,Multidimensional Array,Sizeof,作为程序的一部分,我必须使用一个函数,该函数接受两个表作为参数,并将它们相加,返回另一个表 我想我可以这样做: 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] =

作为程序的一部分,我必须使用一个函数,该函数接受两个表作为参数,并将它们相加,返回另一个表

我想我可以这样做:

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++新手。

没有办法找到指针在C或C++中指向的大小。指针只是一个地址值。您必须将大小(或者在您的情况下是行数或列数)传入addTables函数,如:

int** addTables(int ** table1, int ** table2, int rows, int columns)
这就是为什么评论者提出了向量之类的东西。C++提供了比原始指针更好的数据类型——一方面,向量跟踪它包含的项的数量,因此它不必作为单独的参数传递。
在示例程序中,sizeof运算符返回所提供变量类型的大小。因此,对于sizeoftablePtr,它返回int**的大小,可能是4或8字节。Sigeof操作是编译时间的评估,所以它无法知道TabLabTrar指向的缓冲区有多大。

< P>无法找到指针指向C或C++的大小。指针只是一个地址值。您必须将大小(或者在您的情况下是行数或列数)传入addTables函数,如:

int** addTables(int ** table1, int ** table2, int rows, int columns)
这就是为什么评论者提出了向量之类的东西。C++提供了比原始指针更好的数据类型——一方面,向量跟踪它包含的项的数量,因此它不必作为单独的参数传递。
在示例程序中,sizeof运算符返回所提供变量类型的大小。因此,对于sizeoftablePtr,它返回int**的大小,可能是4或8字节。sizeof操作是在编译时计算的,因此它无法知道tablePtr指向的缓冲区有多大。

当您说我必须使用指向int的双指针时,这是否意味着约束?如果不是,我肯定会推荐使用向量。当你不需要额外的速度或优雅时,2D就足够了。不管怎样,指针的大小总是一样的。有什么理由不能使用vector或boost::multi_数组来实现这个目的吗?Chris,Brendan Long:我必须使用双指针,因为这是一个学校项目,使用双指针是必须的。当你说我必须使用双指针指向int时,这是不是意味着一个约束?如果不是,我肯定会推荐使用向量。当你不需要额外的速度或优雅时,2D就足够了。不管怎样,指针的大小总是一样的。有什么原因不能使用vector或boost::multi_数组来实现这个目的吗?Chris,Brendan Long:我必须使用双指针,因为这是一个学校项目,使用双指针是必需的。不过,将容器与指针进行比较是没有意义的。如果函数在C++中习惯性地接受一对指针或指针,大小对,函数就可以接受C++中的一对迭代器。请记住,一对指针就是一对迭代器。shf301:好的,谢谢,我想我必须将行和列作为函数参数。不过,将容器与指针进行比较是没有意义的。如果函数在C++中习惯性地接受一对指针或指针,大小对,函数就可以接受C++中的一对迭代器。请记住,一对指针就是一对迭代器。shf301:好的,谢谢,我想我必须将行和列作为函数参数。