// C结构体
typedef struct {
ElemSet e1;
ElemSet e2;
ElemSet e3;
}Triplet;
// 初始化
Status InitTriplet(Triplet *t,ElemSet v1,ElemSet v2,ElemSet v3) {
// 申请空间
t = (Triplet *)malloc(sizeof(Triplet));
if (!t) {
// 申请空间失败,返回错误
return ERROR;
}
t->e1 = v1;
t->e2 = v2;
t->e3 = v3;
return OK;
}
int main(int argc, const char * argv[]) {
// insert code here...
Triplet t;
InitTriplet(&t, 10, 15, 20);
printf("%p\n", &t);
printf("%d\n", t.e2);
t.e2 = 100;
printf("%d\n", t.e2);
return 0;
}
为什么通过InitTriplet方法初始化后再获取e2的值是0,而不是我传入的15?
简直是乱成一锅粥。
首先
InitTriplet
函数并没什么作用,因为t
只是个局部变量。得声明成Triplet **
才行。这就是为什么你的初始化没有效果。其次在main
函数里的t
已经是自动变量(内存已经在栈上自动分配好),还去给它申请空间是要干什么?我猜你的目的应该是这样: