阵列引用 - 页 3

 

我的天啊,这个结构的大小 --

struct ArrayStore
{
   long reserved;
   double x[];
};

60个字节),但这太疯狂了。这有52个字节需要解读。

如果你有兴趣,这里是用于挖掘的初始代码

#import "msvcrt.dll"
  long memcpy(long &dst, long &src, int cnt);
  long memcpy(uchar &dst[], long &src, int cnt);
#import

struct ArrayStore
{
   long reserved;
   double x[];
};

#define N 60
// sizeof(ArrayStore) == 60

void OnStart()
{
   ArrayStore store;
   ArrayResize(store.x, 0x11, 0x22);
   store.reserved = 0xFF;
   
   uchar array[N];
   ArrayInitialize(array, 0);
   
   memcpy(array, store.reserved, N);
   
   string s;
   for (int i = 0; i < N; i++)
   {
      s = s + " " + StringFormat("%.2X", array[i]);
   }
   Print(s);
}
 
ArrayStore::double x[];
我不明白这个参数的要点...
 
sergeev:
我不明白这个参数的要点...

如何获得数组中 第一个元素 的地址。

long ArrPtr = memcpy(Arr[0], Arr[0], 1);


不起作用?

 
MetaDriver:

获取一个数组的 第一个元素 的地址呢。

long ArrPtr = memcpy(Arr[0], Arr[0], 1);


不起作用?

当然,作品。

但我还是不明白为什么

ArrayStore::double x[];
 
sergeev:

当然,它是有效的。

但我仍然不明白为什么

我也不明白这一点。:)
 
MetaDriver:
我也不明白。:)

来吧。

让我再次重复这个任务。用相对于时间序列大小的时间O(1)对其进行参考。也就是说,先验地禁止复制阵列。

唯一的方法是获取数组结构。所以,强迫用时间序列指针代替数组指针,再加上一些参数,使结构认为它是可以的。

数组结构的大小 是52个字节,其中8个(估计)实际上是一个指针,其余的是设置,如大小、储备、AsSeries属性等。(Win7x64)

现在的任务是解开结构,学习如何滑出足够的数据。

Документация по MQL5: Основы языка / Операции и выражения / Другие операции
Документация по MQL5: Основы языка / Операции и выражения / Другие операции
  • www.mql5.com
Основы языка / Операции и выражения / Другие операции - Документация по MQL5
 
sergeev:

当然,作品。

这当然有效,但这样我们得到的是一个 数据的指针,我们不能替换指针,我们只能替换数据,所以......。我们需要更深入地了解 (C)
 

要么就是我不明白需要什么。

在第一个帖子中,你设置了问题。

某种数组的引用,像这样。

我向你展示了memcpy成功地获得了一个 指向数组的指针。

然后使用同样的memcpy并获得数据。


那么,你真正需要的是什么? 为什么你要在这里建立某种结构? 它与一个数组的指针有什么关系?

 
sergeev:

然后使用memcpy并检索数据。

慢慢地。所有的dll函数都是通过一个包装器来调用的。

我需要一个没有复制的正常数组。

看看第一个帖子。它有一个非常精确的代码,准确地说出了我想要的东西。

 
TheXpert:

慢慢地。所有的dll函数都是通过一个包装器来调用的。

我需要一个没有复制的正常数组。

看看第一个帖子。有一个非常精确的代码,说的正是我想要的东西。

这很简单:)在《四重奏》中做一个完整的时间序列阵列(你的是第九个),金钥匙就在你的口袋里:)

他们会给你一个耳光的,我认为。你不能黑掉这头神圣的牛。