【发布时间】:2019-03-01 20:46:31
【问题描述】:
我需要使用具有以下 typedef 和方法的库:
typedef short int SomeArray[3];
void method(SomeArray* arr){//doSomething}
在我的主代码中,我有一个大数组,并且想要一个较小的数组,它的索引值与较大的数组完全相同:
short int var[5] = {0, 1, 2, 4, 5};
我需要一个 SomeArray 类型的变量,它的 [0] = var[1], [1] = var[2], [2] = var[3] 将它传递给 test() 方法。这个:
short int* intf = &var[1];
当我通过 intf[?] 访问它时给出我需要的东西。但是如何将其转换为 SomeArray 类型的变量以成为具有 3 个元素的数组?我尝试了不同的方法,例如
SomeArray* arr = intf;
SomeArray* arr = (SomeArray*)intf;
SomeArray* arr = &var[1];
但是要么它不起作用,要么每个 arr 元素的元素地址与更大数组的元素地址(在所需位置上)不匹配。
【问题讨论】:
-
请注意,C 和 C++ 是两种 非常 不同的语言,它们的很多语义细节都不同。如果您询问 C++,请不要同时标记 C。
-
另外,数组不是指针,指针也不是数组。数组和指针类型是不同的。数组可以衰减到指向其第一个元素的指针,并且指针可以像数组一样被索引(因为所有数组索引实际上都是指针算术)。
-
@SanderDeDycker 它在编译时给了我错误,例如“无法将 'short unsigned int*' 转换为 'short unsigned int ()[3]”或无法转换 'short unsigned int*' 到 'short unsigned int (*)[3]
-
至于解决问题的可能方法,为什么不创建
SomeArray的新instance,例如SomeArray intf;然后copy 需要的元素从var到intf? -
SomeArray是类型“三个short ints 的数组”,因此SomeArray*是类型“指向三个short ints 的数组的指针”。intf的类型为“指向一个short int的指针”。指向一个short int的指针不是指向三个short int的数组的指针。如果您只是想要一个指向更大的short int数组的指针,那么您要查找的类型是short int*。