小编Dou*_* II的帖子

结构成员如何在内存中分配?

在尝试为未来的C程序创建内存管理器时,我遇到了这个问题:

"当分配结构时,它们的成员字段是否按照指定的顺序存储?"

例如,考虑以下结构.

typedef struct {
    int field1;
    int field2;
    char field3;
} SomeType;
Run Code Online (Sandbox Code Playgroud)

分配时,字段的内存地址是否在字段field1,field2,field3中?或者这不保证?

c struct memory-management

10
推荐指数
2
解决办法
1万
查看次数

C:为什么&(void*)和void**不兼容?

虽然我的代码正常运行,但我收到了一个不兼容的指针类型错误警告.首先,这是我的代码的简化版本:

typedef struct {
    int field1;
    int field2;
} my_struct;

void some_function(void **data){
    // do something with *data
}

int main(int argc, char *argv[]){
    my_struct *ptr = malloc(sizeof(my_struct));
    ptr->field1 = 5;
    ptr->field2 = 17;
    some_function(&ptr);
}
Run Code Online (Sandbox Code Playgroud)

my_struct类型是一个例子,但是我实际使用多种类型,因此some_func必须接受void**,而不是my_struct**.每次我some_func按上述方式打电话时,都会收到以下警告,但我的代码功能正常.

warning: passing argument 1 of ‘my_func’ from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)

我不确定为什么这些类型不兼容,并希望以某种方式删除警告.要获得答案,请随时解释为什么会发生这种情况,如果可能的话,如何删除警告(可能是cpp指令?).谢谢!

c pointers incompatibility

5
推荐指数
2
解决办法
447
查看次数

标签 统计

c ×2

incompatibility ×1

memory-management ×1

pointers ×1

struct ×1