⑴ c语言如何返回值
首先说明一下你的程序的问题与缺陷:
1: return语句 只能返回一个值,而不能写成 “return h,l;”
2:你在main()中定义了h,l,而在调用cal()时,又定义了h,l,这两个h,l是完全不同的两组。即使你为cal()里的h,l赋值,那么返回到main()时,h,l仍然为0.
3:你在cal()里的scanf写的不好。两个%d之间最好什么都没有,加了逗号,可能会在读取时,h,l赋值错误。(具体请看我下面的程序)
下面是我的解法:
先问一下,你用的是TC2.0还是VC6.0?
如果是VC6.0,那么可以使用引用类型:
/*法一:使用引用*/
#include<stdio.h>
voidcal(int&ch,int&cl);/*声明ch,cl为引用类型*/
voidmain()
{
inth=0,l=0;
cal(h,l);/*这里将h,l传入cal()*/
printf("%d,%d",h,l);
}
voidcal(int&ch,int&cl)
{
scanf("%d%d",&ch,&cl);/*这里为ch,cl赋值*/
}
TC2.0中好像不支持引用类型。我没测试。
-------------------------
如果是TC2.0,那么可以使用指针:
/*法二:使用指针*/
#include<stdio.h>
voidcal(int*ph,int*pl);/*这里将ph,pl声明为指针*/
voidmain()
{
inth=0,l=0;
cal(&h,&l);/*将变量h,l地址传过去。*/
printf("%d,%d",h,l);
}
voidcal(int*ph,int*pl)
{
scanf("%d%d",ph,pl);/*为ph,pl赋值*/
}
------------------
以上两种方法都可以解决你说的问题。
有问题请追问。
⑵ c语言如何实现 多参数返回 啊
在C语言中,一般情况下函数的返回值是通过函数中的return语句来实现的,每调用一次return语句只能从函数中返回一个值。但在实际很多应用中,我们需要从函数中返回多个值,那我们可以用什么方法实现呢?此时我们可以用三种方法来实现。
方法一:设置全局变量
全局变量是在函数外部定义的全局变量,它不属于任何一个函数,其作用域是从变量的定义处开始,到本程序文件的结尾。在此作用域内,全局变量可为各个函数所引用。当我们需要函数返回多个值时,除了函数体中的return语句返回其中一个之外,其它的返回值我们可以通过定义全局变量来处理。因为根据全局变量的特点,在被调用函数中改变了多个全局变量和值,相当于其主调函数全局变量的值也发生了变化,也就相当于返回了多个值。
例如:利用一个函数求出正方形的周长和面积。
#include
double l=0;//定义全局变量l为正方形周长
void f(double a)//定义求面积和周长的函数
{ double s; s=a*a;//求面积
l=6*a;//求周长,并赋给全局变量l
return s;//仅返回面积的值
}
void main()
{ double a,area;
printf(“请输入边长:");
scanf("%f",&a);
area=f(a);//面积的值通过调用f函数返回值
printf(“面积为:%5.2lf\n”,area);
printf(“周长为:%5.2lf\n”,l);//周长即为全局变量l在f函数中改变后的值
}
上面的例子即用全局变量实现了函数中返回多值的情况,这种方式易懂。但是全局变量用多了会破坏代码的安全性,结构性,这主要是全局变量在所有函数中都可以使用,从而其值的变化不确定,所以我们要慎用。
方法二:使用数组名或指针作为函数的形参
数组名或者指针实际为地址,而数组一般都包括多个元素,指针也可以指向一组数据的着地址,把数组名或者指针作为函数形参,实际上相当于主调函数的实参与形参共用地址,所以在函数中的数组元素发生改变即是实参也随之改变。也相当于在调用函数时多个值返回给主调函数。
实例2:编写函数求一维整形数组的最大值与最小值,并把最大值与最小值返回给主调函数。
方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的第一个元素交换,把数组的最小值与最后一个元素交换。函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能。程序参考代码如下:
#include"stdio.h"
#include"conio.h"
voidmax_min(int*ptr,intn)/*定义求数组最大值最小值的函数,传递数组指针*/
{inti,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/
int*temp;/*用于交换位置*/
*temp=*ptr;
for(i=0;i{
if(*ptr<*(ptr+i))/*最大值与第一个元素进行交换*/
{
k=i;
*temp=*ptr;
*ptr=*(ptr+k);
*(ptr+k)=*temp;
}
if(*(ptr+n-1)>*(ptr+i))/*最小值与最后一个元素进行交换*/
{
j=i;
*temp=*(ptr+n-1);
*(ptr+n-1)=*(ptr+j);
*(ptr+j)=*temp;}
}
}
/*调用最大最小值函数*/
main()
{
intA[6],i;
for(i=0;i<6;i++)
scanf("%d",&A[i]);
max_min(A,6);
printf("max=%d,min=%d ",A[0],A[5]);
getch();
}
调试结果如下:
请输入6个整形数,以空格隔开:
5 8 9 32 -6 4
max=32,min=-6
注意:该方法适用于多个返回值的数据类型一致的情况。当返回值数据类型不一致时,不适用该方法。
方法三:使用结构体指针作为函数的形参
编写返回多个值的C语言函数,可以考虑采用结构体的方式去实现。如果返回的数个数值的数据类型不一致,可以通过定义全局变量实现有多个返回值的C语言函数,也可以考虑把要求返回的数个值定义成一个结构体,然后同样以传递结构体指针方式把结构体的指针传递给形参结构体指针,那么函数中对形参结构体的修改即是对实参结构体的修改,函数被调用后获取的实参结构体成员即为函数的多个返回值,下面以实例演示该方法的应用。
实例3:编写一个用户自定义函数,允许用户录入学生的基本信息(包括学号、姓名、所属班级、总评成绩),并返回这些基本信息给主调函数。
方法:把学生基本信息定义成一个结构体,在用户自定义函数中传递该结构体的指针,则自定义函数中对结构体成员的录入操作即是对实参结构体成员的录入操作,从而实现多个返回值。参考代码如下:
#include"stdio.h"
#include"conio.h"
structinf{/*定义学生结构体,分别包含成员学号、姓名、班别、总评成绩*/
charxh[12];
charname[20];
charclass[15];
intchj;
};
main(void)
{
structinfa1;/*定义学生结构体类型变量*/
voidxxxx(structinf*ptr);
printf("请输入学号,姓名,班别,总评成绩,以空格隔开: ");
xxxx(&a1);/*调用函数,以学生结构体类型变量地址作为实参*/
printf("学号:%s,姓名:%s,班别:%s,总评成绩:%d",a1.xh,a1.name,a1.class,a1.chj);
getch();
}
voidxxxx(structinf*ptr)/*该函数实现对结构体成员数据的录入操作*/
{
charxh1[12],name1[20],class1[15];
intchj1;
scanf("%s%s%s%d",xh1,name1,class1,&chj1);
strcpy(ptr->xh,xh1);
strcpy(ptr->name,name1);
strcpy(ptr->class,class1);
ptr->chj=chj1;
}
⑶ 求教 C语言 返回函数参数问题
这个图是试图给大家解释那个迭代的计算过程的参数传递,第一个n=4,因为n!=0,所以执行n-1的那个分支。第二个n=3,第三个n=2。然后第四个n=1,最后是执行n=0,返回s=1那个分支。
⑷ c语言中,函数返回值怎么用
return后接一个值。
在调用这个函数的函数里面,调用它的时候希望获得一个值,如果不希望获得这个值的时候,用void声明就好。如果需要,比如说需要得到一个整形值
就声明
int func()
在调用它的比如main里面
func()的作用就可以相当于一个int型常数
比如外面定义了
int max(int a,int b)
{
return a>b?a:b;
}
主函数里面是
main()
{
int A;
A=max(1,2);
}
这时候就是通过max计算 1>2 则return 一个1 ,1<2 则return一个2。很明显1<2 所以这里max(1,2)就会return 一个 2
这时候主函数里的max(1,2)就相当于一个常数 2
A=max(1,2)的作用就相当于A=2
这个意思。
⑸ C语言指针作函数参数时的返回问题
首先,弄懂函数参数都是靠值传递。指针也是。
进入函数后,函数创建几个空间给形参,再把实参数值拷过来。退出函数时,把形参空间释放,则影响不到实参。这就是值传递。
swap(int *p1,int *p2)函数首先创建两个空间,是指针,再把实参复制过来,即p1=pointer_1=&a,p2=pointer_2=&b,改变p1,p2就分别指向了a,b.改变p1指向的值就是改变了a。然后交换*p1,*p2,ab就互换了。函数退出,释放p1,p2所占的内存空间。但是a,b值互换了。swap函数没有改变实参pointer_1,pointer_2的内容,只是借助指针实现了巧妙的干坤大挪移。
学到c++后有个引用例外,那是后话了。
++++++++++++++++++++++华丽丽的分割线+++++++++++++++++++++
其实很简单,不要硬记规律,要理解了。
第二个例子中swap(int x,int y)没有改变原来实参a,b的值
第一个例子中swap(int *p1,int *p2)也没有改变原来两个实参pointer_1,pointer_2的值,他们值分别是是a,b地址,但pointer_1,2指向的内容改变了,改的是以pointer_1,pointer_2的值为地址的内存单元的值。
⑹ C语言和汇编混合编程时如何带回一个以上的返回参数
本来C语言就只能返回一个值,不管你和什么语言混合。可以用指针参数返回值,也可以定义一个结构,包装好要返回的多个值,然后返回其指针,注意不要返回栈内存的地址就可以了
⑺ 关于c语言中返回值 有什么作用 到底怎么返回的
返回到函数调用处了。
比如你主函数中有如下调用
int a,b=1,c=2;
int *s=&b,*t =&c;
然后
a=fun(s,t);
这样返回值就替代了这个函数,假设返回值是x,那么刚刚那句话相当于a=x;
返回值会替代函数的调用,成为这个函数所调用的值。
不懂请追问。求采纳~
⑻ C语言下程序如何通过改变地址指向将参数值返回主函数急求
你的for循环有问题a[i]!='