【发布时间】:2018-02-15 13:25:57
【问题描述】:
我正在 C 中创建一个二维数组,如下所示:
int array1[] = {1,2,3,4,5,6,7,8,9,10};
int array2[] = {11,12,13,14,15};
int* array3[2] = {array1,array2};
现在我想获得两个维度的大小。对于第一个维度,如果我使用以下代码,我会得到 2 的正确结果:
int array3_x = sizeof(array3)/sizeof(*array3); // array3_x = 2
但我无法获得另一个维度的大小。到目前为止,我已经尝试了以下方法:
for (int i = 0; i < array3_x; ++i) {
array3_y[i] = sizeof(array3[i])/sizeof(*array3[i]);
}
我总是得到 1 的结果。有没有办法得到正确的 10 和 5 大小?
【问题讨论】:
-
这是 C 还是 C++?如果是 C++,那么我认为不可能,你应该使用
std::vector。如果是 C,那么我不知道答案,因为 VLA 很奇怪。无论哪种方式,请只标记一个。 -
这里没有二维数组。只有 2 个一维整数数组和一个一维指针数组。
-
你是对的 John3136,我首先有一个一维整数数组,我将它放在一个指针内。但是如何从指针中获取整数数组的大小?
-
*array3[i]是 int 类型。它不是一个数组。问题是,您将数组退化为指针,这些指针不可能携带任何此类信息。您需要将数据存储在其他地方(或执行诸如空终止之类的操作,这很难看)。或者,如果可能,您切换到 C++。 -
指向两个不同大小数组的容器不是二维数组。与为什么数学矩阵必须是方形的原因相同。