我试图找出为什么我的结构值在函数返回后丢失。
struct A {
int val1;
int val2;
}
main() {
struct A *a;
a->val1 = 1;
a->val2 = 2;
calc((void*)a);
// calc returns and a's values are 1 and 2 respectively
}
void calc(void* v) {
struct A *a = (struct A*) v;
...
a->val1 = 2;
a->val2 = 3;
}
最佳答案
当你想处理指针时,你必须引入动态内存分配。创建指针意味着您告诉编译器“我将在其中存储变量的地址”。因此,在这种情况下,要么创建一个对象,为其分配地址,要么动态为其分配内存。
案例1:
main() {
struct A *a;
struct A obj;//assign address of other object manually
a = &obj;
a->val1 = 1;
a->val2 = 2;
calc((void*)a);
// calc returns and a's values are 1 and 2 respectively
}
案例2:
main() {
struct A *a;
a = (A *) malloc(sizeof(A));//dynamic memory allocation
a->val1 = 1;
a->val2 = 2;
calc((void*)a);
// calc returns and a's values are 1 and 2 respectively
}
关于函数调用值丢失后 C 返回结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40966338/