我被要求在2个整数之间进行交换。
#include <stdio.h>
#include <stdlib.h>
void swaplol(int a, int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
printf("After the swap : a= %d, b=%d\n",a,b);
}
我不知道问题出在哪里。一切看起来都很合理......
int main(void)
{
int a,b;
a = 666;
b = 998;
printf("Before the swap a = %d, b = %d\n",a,b);
swaplol(a,b);
return 0;
}
由于
答案 0 :(得分:2)
你需要将整数的地址传递给swap函数,这样当交换值时,你会在main中交换a和b值。因此,您必须将swaplol函数更改为接受指针而不是整数。
#include <stdio.h>
#include <stdlib.h>
void swaplol(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
printf("After the swap : a= %d, b=%d\n",*a,*b);
}
int main(void) {
// your code goes here
int a,b;
a = 666;
b = 998;
printf("Before the swap a = %d, b = %d\n",a,b);
swaplol(&a,&b);
printf("After the swap : a= %d, b=%d\n",a,b);
return 0;
}
答案 1 :(得分:1)
交换函数应该交换main中声明的原始变量的值。
为此,函数必须通过引用接受变量。
您应该从函数中删除输出语句并将其放在main中以证明原始变量已被交换。
例如
<stdlib.h>
无需包含标题Parse error: syntax error, unexpected 'if' (T_IF) in C:\xampp\htdocs\PCzone\login.php on line 136
答案 2 :(得分:0)
使用指针:
void swaplol( int * a, int * b )
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int main(void)
{
int a, b;
a = 666;
b = 998;
printf( "Before the swap a = %d, b = %d\n", a ,b );
swaplol( &a, &b);
printf( "After the swap : a= %d, b=%d\n", a, b );
return 0;
}
答案 3 :(得分:0)
只需添加指针..我在不使用临时变量的情况下提供代码段。
int main()
{
....
....
swaplol(&a,&b);
}
int swaplol(int *a,int *b)
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
printf("a=%d,b=%d",a,b);
}
答案 4 :(得分:0)
在C
中,在指针的帮助下,按值调用和按地址调用。在那里,您可以通过引用“模拟”其他语言中的调用。
默认情况下,C
使用call(pass) by value
传递参数。这意味着函数中的代码不能改变用于调用函数的参数。
让我们看看以下例子:
#include <stdio.h>
void foo( int x );
int main( void ){
int x = 5;
foo(x);
printf("X = %d\n", x);
}
void foo( int x ){
x = 10;
}
输出为5
。
如果您使用设置已打开的良好编译器,您将看到此类警告:
program.c:14:15: error: parameter ‘x’ set but not used [-Werror=unused-but-set-parameter]
void foo( int x ){
^
现在刚刚发生了什么? 根据定义,按值调用(传递)意味着您在内存中复制传入的实际参数值,即实际参数内容的副本。
如果你真的需要修改一个值,你需要传递该变量的地址并使用指针指向它:
#include <stdio.h>
void foo( int *x );
int main( void ){
int x = 5;
foo(&x);
printf("X = %d\n", x);
}
void foo( int *x ){
*x = 10;
}
现在输出将为10
。