
c语言编程问题(不知道哪错了,返回值应该是什么 5
#include<stdio.h>intswap(inta,intb);main(){intx=7,y=11;printf("x=%d,\ty=%d\n",x,y);pr...
#include <stdio.h>
int swap(int a,int b);
main()
{ int x=7,y=11;
printf("x=%d,\ty=%d\n",x,y);
printf("swapped:\n");
swap(x,y);
printf("x=%d,\ty=%d\n",x,y);
}
swap(int a,int b)
{ int temp;
temp=a; a=b; b=temp;
} 展开
int swap(int a,int b);
main()
{ int x=7,y=11;
printf("x=%d,\ty=%d\n",x,y);
printf("swapped:\n");
swap(x,y);
printf("x=%d,\ty=%d\n",x,y);
}
swap(int a,int b)
{ int temp;
temp=a; a=b; b=temp;
} 展开
6个回答
展开全部
这个C语言里最入门的知识了吧,先不说功能,就语法上来看,前面声明了一个返回值为int型的swap函数,后面却定义了一个无返回值的swap函数?
从功能上说,你的swap函数根本就无法完成数值交换,C语言的书籍中都会把这个函数作为一个典型的例子进行讲解,其中提到了传值操作和传地址操作的不同:通过传值操作而进行的数据交换只影响形参的值,而不能改变实参的值!
//版本1:试图通过传值方式进行数据交换
void swap(int a,int b) {...} 再这个函数中a的值是x的一个副本,b的值是y的一个副本,该函数仅仅是交换了两个副本的值,对实参x和y没有丝毫影响。
//版本2:通过引用方式进行数据交换,前面的声明也要改成一致的!
void swap(int *a,int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
main()函数中这样使用:swap(&x,&y);
指针a直接指向了实参x的地址,指针b直接指向了实参y的地址,然后再函数中将两个地址中保存的值(即实参的值)进行了交换。
除此以外,在C++语言中还有一种方式:引用。不过C语言里没有引用的概念。
从功能上说,你的swap函数根本就无法完成数值交换,C语言的书籍中都会把这个函数作为一个典型的例子进行讲解,其中提到了传值操作和传地址操作的不同:通过传值操作而进行的数据交换只影响形参的值,而不能改变实参的值!
//版本1:试图通过传值方式进行数据交换
void swap(int a,int b) {...} 再这个函数中a的值是x的一个副本,b的值是y的一个副本,该函数仅仅是交换了两个副本的值,对实参x和y没有丝毫影响。
//版本2:通过引用方式进行数据交换,前面的声明也要改成一致的!
void swap(int *a,int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
main()函数中这样使用:swap(&x,&y);
指针a直接指向了实参x的地址,指针b直接指向了实参y的地址,然后再函数中将两个地址中保存的值(即实参的值)进行了交换。
除此以外,在C++语言中还有一种方式:引用。不过C语言里没有引用的概念。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
亲,代码哪去了?
就像楼下说的,如果要返回的话就是返回一个整数就行,和你这个程序没得关系得。
如果按你程序的思想是想交换x,y的值,但是像你这样是根本不能交换的,这个关系到形参和实参的概念,调用swap函数的时候,只是把实参x,y的值给穿过去了,这个时候就和x,y没得关系了,当swap函数执行完后,就会释放a,b的空间,根本没有改变x,y的值:要想实现交换可以用指针,不晓得你学没:
#include <stdio.h>
int swap(int *a,int *b);
void main()
{
int x=7,y=11;
printf("x=%d,\ty=%d\n",x,y);
printf("swapped:\n");
swap(&x,&y);//将x,y的地址传过去,调用这个函数的时候哦,a,b就指向了x,y这个地址。
printf("x=%d,\ty=%d\n",x,y);
}
swap(int *a,int *b)
{
int temp;
temp=*a; *a=*b; *b=temp;//*a,*b是取x,y这个地址里面的值进行交换。
return 1;
}
程序运行是对的,不晓得你看得懂不。。。学过指针的话,就很简答了。
就像楼下说的,如果要返回的话就是返回一个整数就行,和你这个程序没得关系得。
如果按你程序的思想是想交换x,y的值,但是像你这样是根本不能交换的,这个关系到形参和实参的概念,调用swap函数的时候,只是把实参x,y的值给穿过去了,这个时候就和x,y没得关系了,当swap函数执行完后,就会释放a,b的空间,根本没有改变x,y的值:要想实现交换可以用指针,不晓得你学没:
#include <stdio.h>
int swap(int *a,int *b);
void main()
{
int x=7,y=11;
printf("x=%d,\ty=%d\n",x,y);
printf("swapped:\n");
swap(&x,&y);//将x,y的地址传过去,调用这个函数的时候哦,a,b就指向了x,y这个地址。
printf("x=%d,\ty=%d\n",x,y);
}
swap(int *a,int *b)
{
int temp;
temp=*a; *a=*b; *b=temp;//*a,*b是取x,y这个地址里面的值进行交换。
return 1;
}
程序运行是对的,不晓得你看得懂不。。。学过指针的话,就很简答了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有代码怎么回答?
函数定义的返回值是int类型的,所以你的swap():
int swap(int a,int b)
{ int temp;
temp=a; a=b; b=temp;
return 1;
}
你这样的写法交换两个数是错误的。正确的如下:
#include <stdio.h>
int swap(int *a,int *b);
main()
{ int x=7,y=11;
printf("x=%d,\ty=%d\n",x,y);
printf("swapped:\n");
swap(&x,&y);
printf("x=%d,\ty=%d\n",x,y);
}
int swap(int *a,int *b)
{ int temp;
temp=*a; *a=*b; *b=temp;
return 1;
}
函数定义的返回值是int类型的,所以你的swap():
int swap(int a,int b)
{ int temp;
temp=a; a=b; b=temp;
return 1;
}
你这样的写法交换两个数是错误的。正确的如下:
#include <stdio.h>
int swap(int *a,int *b);
main()
{ int x=7,y=11;
printf("x=%d,\ty=%d\n",x,y);
printf("swapped:\n");
swap(&x,&y);
printf("x=%d,\ty=%d\n",x,y);
}
int swap(int *a,int *b)
{ int temp;
temp=*a; *a=*b; *b=temp;
return 1;
}
追问
error LNK2001: unresolved external symbol _main
error LNK1120: 1 unresolved externals
输进去以后是这种错误?、?、、、?
追答
看看你的函数名有没有写对,
int swap(int *a,int *b)
{ int temp;
temp=*a; *a=*b; *b=temp;
return 1;
}
或者变量名
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你应该用引用或者指针来传参数,不然即使你的x和y交换成功了,也只是在函数参数上交换成功的,在你实际参数上并没有发生变化。建议将swap(int a, int b)改成swap(int &a, int &b)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题很好 收藏了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询