我可以通过指针传递数组而不传递大小吗?

时间:2016-10-24 12:18:16

标签: c++ pointers multidimensional-array

我可以传递一个多维数组而不使用指针传递它的大小吗?

#include <iostream>
using namespace std;


void PrintArray( int(*pInt)[3] )
{
    // how to iterate here printing pInt content?

    int nRow = sizeof(*pInt) / sizeof(int);
    cout << nRow << endl; // the result: 3 not 2! i get the nColumns instead!!?
}

int main()
{
    int array[2][3] = { {1,2,3},
                        {4,5,6}};
    int(*pArray)[3] = array;
    PrintArray(pArray);

    return 0;
}
  • 任何人都可以添加PrintArray的正确定义来打印其元素
  • 有没有办法将数组作为指针传递而不传递大小?
  • 谢谢你瞥了一眼

1 个答案:

答案 0 :(得分:2)

  

任何人都可以添加PrintArray的正确定义来打印其元素

不可能。当函数接受数组时,所有真正传递的是指向其第一个元素的指针。这就是数组如何工作的。

  

有没有办法将数组作为指针传递而不传递大小?

除非通过引用传递,否则数组总是作为指向第一个元素的指针传递。如果你只有一个指向第一个元素的指针,那么你需要某种方式来获取额外的大小信息。如果您通过引用传递,那么您已经拥有了大小信息,因为它是(完整)类型的一部分。

无论如何,你应该只使用std::vector。原始阵列通常不会表现为#34;在很多方面,std::vector都有。