我想知道如何检查数组是静态分配还是动态分配。我在网上查了一下,在 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/