我有点搞不清 struct 变量的内存分配是如何工作的,以及 struct 变量声明是如何工作的.
我的理解是,当我在函数外部声明 struct 变量时(并使用它,这样编译器就不会对其进行优化),内存将保留给 struct 的总大小(可能还有更多的填充空间).
当 struct 没有被初始化,而是从其他地方传递时,我对函数内部发生的事情感到困惑.
示例代码:
typedef struct mystruct MyStruct;
typedef struct myinnerstruct MyInnerStruct;
struct myinnerstruct{
int b;
};
struct mystruct{
int a;
MyInnerStruct some;
};
.....
void someFunc(MyStruct* some_ptr){
MyInnerStruct something = some_ptr->some;
// Or
MyInnerStruct* something = &some_ptr->some;
}
在本例中,ome Func具有类型指针为MyStruct的参数SOME_PTR.因为如果使用MyStruct本身,参数将拥有MyStruct所需的内存,而不仅仅是 struct 的起始地址的内存.
但是,函数内部的变量又如何呢?这两个表达式是否相等,或者这里会发生什么.就像它不会复制我的内部 struct 一样,那么它还会使用更多的内存吗?
编辑:在这种情况下,我的意思是不应该复制MyInnerStruct变量,它应该只用于访问传递的原始 struct 的相应元素.
此外,以代码为例,mystruct、myinnerstruct等可以更复杂,包含许多变量、指针和其他 struct