我通过一个C项目来理解一些概念,并找到了以下代码。
#define MY_NODE_ALLOC(coffee) ((struct items *)(coffee) + 1)
struct store
{
char *name;
int id;
};
struct items
{
char *itemName
char *itemCode;
int quantity;
};
void * allocation(struct store *shop)
{
struct items *coffee = malloc(sizeof(struct items) + sizeof(*shop));
return MY_NODE_ALLOC(coffee);
}
我有以下问题
总共分配了多少内存?它等于
*shop
和struct items
的大小吗?malloc(sizeof(struct itmes));
和malloc(sizeof(*shop));
这两个语句之间有什么区别这个宏返回的是什么?根据我的理解,在指针上加1是用来跳到数组中的下一个元素的,但我不理解这种情况。
1-分配了多少内存?它等于
*shop
和struct items
的大小吗
是的,如果malloc()
成功,总大小加在一起,以字节为单位。
2-两个语句
malloc(sizeof(struct itmes));
和malloc(sizeof(*shop));
之间有什么区别
在成功的情况下,两个语句分配不同数量的内存。
- CCD_ 10以字节为单位分配与CCD_ 11的大小一样多的字节
malloc(sizeof(*shop);
以字节为单位分配与*shop
(struct store
)的大小一样多的字节
3-这个宏返回的是什么?根据我的理解,在指针上加1是用来跳到数组中的下一个元素,但我不理解这种情况
是的,你是对的。首先,他们将指针强制转换为struct items *
类型,然后递增指针以指向下一个struct items *
类型的内存地址。为了澄清,我们引用C11
,第6.5.6章
当具有整数类型的表达式被添加到指针或从指针中减去时结果具有指针操作数的类型。如果指针操作数指向的元素一个数组对象,并且数组足够大,则结果指向从原始元素,使得结果和原始的下标之差数组元素等于整数表达式。[….]