typedef struct {
// element byte size
int stride;
// element number
int length;
// memory data
void* data;
} Array;
data是个指针,需要malloc申请动态内存。对,这里面放的是数组的数据。好的,那么现在数据有了,那么是什么类型的呢? 就看stride的了,这个值就是每个数组元素的字节大小。sizeof返回的值。数组的长度是什么,就是length。
这个Array的数据放在data指针指向的空间中,元素类型是stride,有length个元素。可以是任何类型,stride和length可以帮助我们遍历数组中的任何一个元素。且看,遍历的代码:
// Get the type pointer points index of Array
#define pointerOfArray(array, index, type) \
((type*) ((char*) ((array)->data) + (array)->stride * (index))) \
参数解释:
- array 就是数组的指针
- index 就是数组元素的索引
- type 就是数组元素的类型
- 返回值是指向数组元素的指针
那么在给出一个宏定义:
// Get the type element which index of Array
#define valueOfArray(array, index, type) \
(*(pointerOfArray(array, index, type))) \
最后在给出一个宏:
// the type is the array element type
#define Array(name) Array \
这个宏啥也没做,但意义非同寻常,这里type可以表示了数组元素的类型,尤其是出现在API中,可以明确数组的意义。