【发布时间】:2021-04-05 11:44:39
【问题描述】:
#include <iostream>
using namespace std;
const int triTable[4][6] = {
{},
{0, 8, 3},
{0, 1, 9},
{1, 8, 3, 9, 8, 1},
};
int main() {
const int *f = triTable[3];
int size = sizeof(f)/sizeof(*f);
cout << size;
}
这给了我错误的数字。它应该打印 6。我怎样才能得到它?
【问题讨论】:
-
由于
f是一个指针,sizeof f将是 指针 的大小,而不是它可能指向的大小。由于您使用 C++ 编程,因此有一个非常简单的解决方案:使用std::array或std::vector代替,您可以轻松获取元素的数量。 -
sizeof(f)/sizeof(*f)等于sizeof(int *)/sizeof(int)与triTable的任一维度都没有关系。要获得第一个维度(即 4),您需要计算sizeof(triTable)/sizeof(*triTable)。要获得第二维(即 6),您需要计算sizeof(*triTable)/sizeof(**triTable)。您也不能使用f来获取,因为triTable[3]到int *的转换会丢失大小信息。