为什么数组元素必须具有相同的类型
Why does Array elements have to be of the same type
Array
ds要求其所有成员具有同一时间。当试图将错误类型的对象存储到对象数组中时,Java会抛出ArrayStoreException。不记得C++
做什么。
是我的理解正确,在数组中拥有相同类型的所有对象很重要,因为它可以保证通过以下两个操作通过以下两个操作访问恒定的时间元素:
1) element size * element index = offset
2) array pointer address + offset
如果对象具有不同的类型并且大小不同,则上述公式将无法使用。
因为:我们想要这样的。
我的意思是:使用Java语言的人(可能是C 相同(正在使用静态键入语言用于目的。
当这样的人开始思考时;他们通常会在"类似"事物的复数中思考。
警告:在Java中,一切都是一个对象,因此您可以随时声明对象[]并将任何内容塞入其中。字符串,数字等等。
也导致了另一个重要方面:在C 中,您的数组代表内存中的一个区域。而且您最好在该领域拥有相同大小的元素;避免数据损坏。
在Java中,数组是不是指向原始内存。
长话短说:在这种情况下,Java和C 之间存在真正的差异(人们必须理解以做出明智的决定(;然后是"语言"本身。换句话说:这不是Ruby Land,您只是将鸭子,数字,植物和Quack声音放在同一"清单"中,而无需进一步思考。
最终思想,基于上一段中的笑话:在我看来, array 是列表概念的实现,因此它是关于同一性质的事物的集合。如果您想要一系列无关的事物,我宁愿称 tuple 。
是的,你是对的。恒定时间随机访问所需的一切。
另外,如果要将不同的数据类型存储在单个数组中,则可以使用一系列无效指针。例如,在C 中,做
void * a[N]
a[i] = (void *)(&YourClass)
同样,在Java中使用Object[]
。
c 语言(和编译器(要求将元素的类型存储在数组中,原因是各种原因,例如指针算术和数组订阅(例如x[i]
(,默认的元素初始化初始化,处理对齐限制,...(。
int x[3] = { 1,2,3 }; // array of 3 int values, each being properly aligned concerning processor architecture;
myObjectType objs[10]; // array of 10 objects of type myObjectType, each being default initialised (probably the default constructor), each being properly aligned
myObjectType *objs[10]; // array of 10 pointers to objects of type myObjectType (including subclasses of myObjectType; allowing dynamic binding and polymorphism). Note: all pointers have the same size, the object to which they point may differ insize.
int *intptr = x;
bool isEqual= (intptr[2] == x[2]); // gives true
intptr += 2; // increases the pointer by "2*sizeof(int)" bytes.
所以,是的,您是对的:一个原因是因为计算偏移;但是还有其他原因,还有其他问题,例如对齐,对指针衰减的数组,默认的初始化逻辑可能更微妙,但也很重要。
- 数组元素打印的递归方法
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 数组元素更改值?
- 如何访问宏中定义的数组元素
- 将数组元素递增 1
- 类型数组?
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 存储指向动态数组元素的指针
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 为什么数组元素必须具有相同的类型
- 将多种数据类型写入文件时的其他行和额外的数组元素
- 没有可行的构造函数复制类型 'MyString' 的数组元素
- 数组元素作为非类型模板参数
- 使用多态基类(包含虚函数)访问数组元素时的类型
- 获取数组元素的类型
- 如何确定数组元素的类型