C 更改函数内变量的值
我想在另一个函数中更改堆栈中的值C 更改函数内变量的值,c,C,我想在另一个函数中更改堆栈中的值 int Function(int *var){ int i=125; var = i; } int Function2(){ int apple; Function(&apple); printf("%d", apple); } 这向我显示了错误:赋值在这一行var=125处从整数生成指针,但没有强制转换 我想将I的值复制到var中,以获得apple=125。(但当我离开函数时,堆栈中的I将被释放。) 我看不出我
int Function(int *var){
int i=125;
var = i;
}
int Function2(){
int apple;
Function(&apple);
printf("%d", apple);
}
这向我显示了错误:赋值在这一行var=125处从整数生成指针,但没有强制转换
代码>
我想将I
的值复制到var
中,以获得apple=125
。(但当我离开函数时,堆栈中的I
将被释放。)
我看不出我在哪里犯了错误。您需要取消对指针的引用
*var = 125;
如前所述,您正试图更改指针中存储的地址(即指针指向的对象)。在您的代码int*var=&apple
中出现
假设apple变量存储在地址0x1000000处
所以var持有苹果的地址。所以var指向0x1000000
若您使用var=i,那个么var变量会保留0x1000000地址,并将新地址保留为i的值125,这是无效的,因为较低的内存地址无法访问
因此,您必须执行*var=i,因为这满足了您的需求 (一个nit),但是“*”
与变量而不是类型一起使用,例如(int*var)
。这也防止了声明中的混淆,请考虑<代码> int *a,b,c;<代码>(b
和c
不是指针…^以上评论是个人风格,不是语言的任何部分。另外,int*
实际上是一种类型*var=i
。这就是你的解决方案的问题,var
value=125,然后我想如果我检查apple
内存地址的值,我会看到125
@Alexis\u FR\u JP是的。你是对的(我在错误地阅读你的评论时删除了我的旧评论)。正如所写的,代码显然是无效的。C语言不支持隐式整数到指针的转换,代码没有定义的行为。因此,无法断定它是在“尝试更改指针中存储的地址”。@AnT尝试了,但失败了。编译器错误说明了这一点。