Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 更改函数内变量的值_C - Fatal编程技术网

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尝试了,但失败了。编译器错误说明了这一点。