我想知道如何检查数组是静态分配还是动态分配。我在网上查了一下,在 mysql source code 中找到了以下实现,我不知道为什么会这样? (第 0303 行检查数组是否是静态的)

       /*

0301     Just mark as empty if we are using a static buffer
0302   */
0303   if (array->buffer == (uchar *)(array + 1))
0304     array->elements= 0;

这是 mysql 中 DYNAMIC_ARRAY 的定义:
341
342 typedef struct st_dynamic_array
343 {
344     uchar *buffer;
345     uint elements,max_element;
346     uint alloc_increment;
347     uint size_of_element;
348 } DYNAMIC_ARRAY;

最佳答案

你不能。

你在这里缺少一些上下文。在这种特殊情况下,已知要么 array->buffer 指向 (uchar*)(array + 1) 并静态分配,要么指向其他位置并动态分配。

但是 (uchar*)(array + 1) 并没有自动意味着某些东西是静态分配的。

这就像询问这个函数如何找到数组的长度(它不会,除非数组以 0 结尾):

int getArrayLength(int *a)
{
    for(int i = 0; ; i++)
        if(a[i] == 0)
            return i + 1;
}

关于c++ - C/C++ : How to check if an array is static or dynamic during runtime,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34428084/

10-15 00:22
查看更多