C+中的结构数组+;(Rad Studio 10.1-Android应用程序) 我通常在C++的Windows中使用Stult数组,内存分别通过构造函数和析构函数中的Nead和Delphi分配。

C+中的结构数组+;(Rad Studio 10.1-Android应用程序) 我通常在C++的Windows中使用Stult数组,内存分别通过构造函数和析构函数中的Nead和Delphi分配。,android,arrays,c++builder,Android,Arrays,C++builder,这是我的第一个安卓应用 自从我将第一个数组从简单数组更改为 在头文件中定义为float AccelZ[1000] 用作AccelZ[i] 指向头文件中定义的结构数组,并在FormCreate和FormDestroy事件中使用new和delete。 并用作加速阵列[i]->Z Android中没有使用结构数组吗?但如果是这样的话,那么我会预料到一个编译错误 谢谢 现在编辑示例: 在头文件中: const int MAXTIMESTEPS = 20000; struct Acceleration

这是我的第一个安卓应用

自从我将第一个数组从简单数组更改为 在头文件中定义为float AccelZ[1000] 用作AccelZ[i]

指向头文件中定义的结构数组,并在FormCreate和FormDestroy事件中使用new和delete。 并用作加速阵列[i]->Z

Android中没有使用结构数组吗?但如果是这样的话,那么我会预料到一个编译错误

谢谢

现在编辑示例:

在头文件中:

const int MAXTIMESTEPS = 20000;  
struct AccelerationRecord  
{  
    float Z;  
};  
在公开场合:

AccelerationRecord* Acceleration[MAXTIMESTEPS];
在Windows中FormCreate下的.cpp文件中,我会将其放入构造函数中,但这对于Android应用程序不起作用(我不熟悉Android应用程序)

首先:

for (int i; i < MAXTIMESTEPS; i++)
我看不到绑定检查,也看不到init,所以上帝知道
计数器的值是多少

其次,我更习惯于这样:

// "globals"
const int MAXTIMESTEPS = 20000; 
struct AccelerationRecord  
    {  
    float Z;  
    };  
AccelerationRecord* Acceleration=NULL;

// init
Acceleration = new AccelerationRecord[MAXTIMESTEPS];

// here do your stuff on AccelerationRecord[i]
AccelerationRecord[7].z=-1.5;

// exit
delete[] Acceleration;

new/delete[]
比为每条记录调用它要好得多,原因有二。首先,你要少的内存管理器(开销少),第二种方法是你得到连续内存块,只记得相同的东西的单指针,而不是代码> 20000代码/代码>使用更少的内存,更快和线性的访问……< /p> C++中的结构和数组在Android上与在任何其他平台上的工作完全一样。您遇到的任何错误通常都是由于您误用它们造成的。
if (MotionSensor1->Sensor-
>AvailableProperties.Contains(TCustomMotionSensor::TProperty::AccelerationZ))  
{  
lbAccelerationZ->Text = lbAccelerationZ->Text.sprintf(L"Acceleration Z: %6.2f",MotionSensor1->Sensor->AccelerationZ+1);  
Counter += 1;  
Acceleration[Counter]->Z = MotionSensor1->Sensor->AccelerationZ+1;  
//crashes at this line in debug mode  
>> snip other code  
}  
for (int i; i < MAXTIMESTEPS; i++)
for (int i=0; i < MAXTIMESTEPS; i++)
Counter += 1;
// "globals"
const int MAXTIMESTEPS = 20000; 
struct AccelerationRecord  
    {  
    float Z;  
    };  
AccelerationRecord* Acceleration=NULL;

// init
Acceleration = new AccelerationRecord[MAXTIMESTEPS];

// here do your stuff on AccelerationRecord[i]
AccelerationRecord[7].z=-1.5;

// exit
delete[] Acceleration;