Java 和 C++ 中的多维数组有什么区别

what is difference between multidimensional array in java and c++?

本文关键字:数组 什么 区别 C++ Java      更新时间:2023-10-16
char a[][4] = {{'a','a','a'},
               {'a','a','a'},
               {'a','a','a'},
               {'a','a','a'}};

在 c++ 中,必须初始化数组的最后一个索引。

在java中,如果这样做,将导致错误。

有人可以解释我为什么吗?

同样当我在 java 中检查这样的数组长度时。

System.out.println(a[0].length);

结果是数组中列的长度

假设数组末尾有一个"\0",当我像这样检查 C++ 中的数组长度时。

cout << strlen(a[0]) 

我得到整个数组的长度。

我可以像在 java 中一样在 c++ 中获取数组中行或列的长度吗?

这是因为 java 中的数组是一个对象吗?

在Java中,多维数组是包含数组的数组(多维数组变量不一定包含多维数组,即它可以为空)。 在C++中,多维数组变量本身就是一个即时创建的巨大数组,其多维性质只是语法糖。 在C++中,您必须初始化数组的第一个索引之外的所有索引,以便告诉编译器如何在多维数组语法和它在幕后实际使用的单个巨型数组之间进行转换。

通过将多维数组初始化为指向数组指针数组的指针,而不是简单地初始化为数组数组(Java 中的对象大多等同于指向 C++ 中的对象的指针),您可以在 C++ 中获得更多类似 Java 的行为。 当然,然后你将不得不担心内存管理,而Java为你做了。

有一个简单的模板,可以用来让编译器给你一个数组的大小:

template <typename T, size_t N>
size_t array_size( T (&)[N] ) {
   return N;
}

该模板可以与整个数组一起使用,也可以与包含的数组一起使用:

char a[][4] = {{'a','a','a'},
               {'a','a','a'},
               {'a','a','a'},
               {'a','a','a'}};
std::cout << array_size(a)    << std::endl;    // 4
std::cout << array_size(a[0]) << std::endl;    // 4

如果您想知道为什么两者都产生相同的结果,数组的大小是先行后列。在您的情况下,您正在用三个元素初始化 4 行(第四个元素将被值初始化,即清零)。如果您打算有 4 行 3 列,您的定义应该是:char a[][3] .

相关文章: