【发布时间】:2021-05-29 07:09:26
【问题描述】:
在 C 程序中,有一个交换函数,这个函数接受一个名为 x 的参数。我希望它通过更改主函数内交换函数中的 x 值来返回它。
当我将参数赋值为变量时,我想要它,但是当我直接为参数设置整数值时,程序会产生随机输出。
#include <stdio.h>
int swap (int x) {
x = 20;
}
int main(void){
int y = 100;
int a = swap(y);
printf ("Value: %d", a);
return 0;
}
此代码的输出:100(如我所愿)
但是这段代码:
#include <stdio.h>
int swap (int x) {
x = 20;
}
int main(void){
int a = swap(100);
printf ("Value: %d", a);
return 0;
}
返回随机值,例如Value: 779964766 或Value:1727975774。
其实在两个代码中,我给函数一个整数类型的值,即使是相同的值,但是为什么输出不一样呢?
【问题讨论】:
-
touch不返回任何内容。此外,x是一个局部变量,更改它不会对调用者产生影响。还有swap甚至在哪里?这和组装有什么关系? -
启用编译器警告,例如使用
gcc -Wall -
return语句从touch()中丢失,您不能只声明int x = 20;并期望函数返回20 -
@Jester我忘了写交换,我编辑了。如果交换函数返回 x,它总是返回 20,我不希望这样。我想从外面干涉这个
-
@GovindParmar 不,我想用我从参数中得到的值替换 x 的值。所以我不想定义一个局部变量。
标签: c assembly gcc undefined-behavior