C语言结构体初始化问题

// 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?

阅读 2.4k
1 个回答

简直是乱成一锅粥。

首先InitTriplet函数并没什么作用,因为t只是个局部变量。得声明成Triplet **才行。这就是为什么你的初始化没有效果。其次在main函数里的t已经是自动变量(内存已经在栈上自动分配好),还去给它申请空间是要干什么?

我猜你的目的应该是这样:

Status InitTriplet(Triplet **t, ...);

int main(int argc, const char * argv[]) {
    Triplet *t = 0;
    InitTriplet(&t, 10, 15, 20);
    ...
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进