3 回答
TA贡献1798条经验 获得超3个赞
单纯的转换对您无济于事。2D数组类型和指针到指针类型之间没有任何兼容性。这样的转换是没有意义的。
如果确实需要这样做,则必须引入一个额外的中间“行索引”数组,该数组将弥合2D数组语义和指针对指针语义之间的鸿沟
Activity solution[a][b];
Activity *solution_rows[a] = { solution[0], solution[1] /* and so on */ };
Activity **mother = solution_rows;
现在访问mother[i][j]将使您可以访问solution[i][j]。
TA贡献1757条经验 获得超7个赞
您可以对一维数组而不是二维数组执行此操作的原因与实际数组元素在内存中的存储方式有关。对于一维数组,所有元素都是连续存储的,因此表达式array[i]
等同于expression *(array + i)
。如您所见,执行数组索引操作不需要数组大小。但是,对于二维数组,元素以“行主要”顺序存储,这意味着第零行中的所有元素都将首先存储,然后是第一行中的元素,然后是第二行中的元素。 ,等等。因此,表达式array[i][j]
等于*(array + (i * ROW_SIZE) + j)
,其中ROW_SIZE
是每行中元素的数量。因此,执行数组索引操作需要数组的行大小,并且将数组变量强制转换为指针会丢失该信息。
TA贡献1779条经验 获得超6个赞
我想将2D对象数组转换为指针到指针。我怎样才能做到这一点?
为什么?是否因为接口需要指向指针的指针?
如果是这样,则需要创建一个包含这些指针的新数组。
Activity solution[a][b];
Activity* solutionPtrs[a];
for (int i = 0; i < a; ++i)
solutionPtrs[a] = solution[a];
Activity** mother = solutionPtrs;
您为什么不能仅将Tto转换为2D数组T**?好吧,因为他们彼此无关!
您可以将a强制转换T[a]为a,T*因为您可以获得指向数组第一个元素的指针。
您也可以使用2D数组来执行此操作,但是如果使用a T[a][b]则它会衰减为a,(T[b])*因为2D数组不是指针数组,而是数组数组。
- 3 回答
- 0 关注
- 367 浏览
添加回答
举报