我正在用C语言创建一个动态数组,我还想创建一个函数,该函数用一定数量的元素初始化给定的动态array.但是,在确定内存分配的每个元素的大小时,我不知props 体要做什么.
以下是我的代码:
#define typedef_list(name, type) \
typedef struct { \
int cap; \
int n; \
type *items; \
} name;
#define list_init(list, cap) \
do { \
list.items = malloc(cap * sizeof(*list.items)); /* problem line */ \
list.cap = cap; \
} while (0);
#endif
我使用sizeof(*list.items)
来获取所指向的任何对象的大小.它似乎起作用了,因为以下宏对给定类型起作用:
#define list_test(list) do { printf("%lu\n", sizeof(*(list.items))); } while(0);
这样做可以接受吗,因为从技术上讲,内存还没有分配?我的猜测是,编译器并没有试图访问该内存,而只是"知道"内存的大小,但是这样可以吗?
编辑-以下是我用来测试这一点的代码:
typedef_list(dyn, uint16_t); // works with any given type
int main(void) {
dyn arr;
list_test(arr);
}