我创建了一个类型并尝试更改其中的int值。 但它继续打印240。 我不知道为什么,任何人都可以帮助我吗? 这是我的代码:
typedef struct{
int i;
}MyType;
do(MyType mt, int ii){
mt.i = ii;
}
int main(int argc, char ** argv){
MyType mt;
do(mt, 5);
print("%d\n", mt.i);
}
答案 0 :(得分:3)
将值mt
传递给函数do()
。所做的任何更改都将是函数的本地更改。传递mt
的地址:
void do_func(MtType* mt, int ii){
mt->i = ii;
}
MyType mt;
do_func(&mt, 5);
答案 1 :(得分:1)
首先,您的do
函数存在一些问题。您未能指定返回类型,因此假定为int(在C99之前),但我认为没有理由不指定它。其次,do
是C中的保留关键字。
您正在按值传递结构,因此会制作副本,传递给do
函数, 会被修改。一切都在C,期间以值传递。永远不会触及mt
中声明的main
变量。
如果需要修改一个或多个成员变量,请在代码中使用MyType*
,如果需要为结构本身分配内存(即初始化指针),请选择MyType**
// pass a pointer to the function to allow
// for changes to the member variables to be
// visible to callers of your code.
void init_mytype(MyType *mt, int ii){
if(mt)
mt->i = ii;
}
MyType mt;
init_mytype(&mt, 1);
// pass a pointer to pointer to initialize memory
// for the structure and return a valid pointer.
// remember, everything is passed by value (copy)
void init_mytype(MyType **mt, int ii) {
if(mt) {
*mt = malloc(sizeof(MyType));
if(*mt)
(*mt)->i = ii;
}
}
MyType *pmt;
init_mytype(&pmt, 1);