十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这是C中一个很典型的问题,传值和传地址值的区别:
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、微信平台小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了安国免费建站欢迎大家使用!
传值方式:
void jtf(float x0,float h,float a,float b),这样传的a和b就是传值,传参的时候会构造一个a和b的副本对象,在函数jtf中对a和b所做的任何操作都是对副本对象的操作,和原来的a b毫无关系,原来的a b的值不会改变。
传地址值方式:
float a, b;
void jtf(float x0,float h,float a,float b) - jtf(a, b); //引用
void jtf(float x0,float h,float* a,float* b) -jtf(a, b);//指针
使用引用和指针即是传地址值方式, 传递的是原来的a b的地址,在函数jff中所做的所有操作都是针对a b本身的.所做的改变也会保留.
很显然, 你的程序应该是用第二种方式的.
首先函数:char
strcat
(char
x[],char
y[])返回值是char型
你在函数中却返回char型指针。
其次for语句:for
(i
=
m;i
=
m
+
n;i
++)
m+n要大于x,y字符串的长度,可能会越界。
递归函数myPower的定义有逻辑错误,改成:
double myPower(int a,int b)
{
if(0==b) return 1;
return a*myPower(a,b-1);
}
如果改成这样,会更高效:
double myPower(int a,int b)
{
if(0==b) return 1;
if(1==b) return a;
return myPower(a,b%2)*myPower(a*a,b/2);
}
例子1
#include stdio.h
double myPower(int a,int b)
{
if(0==b) return 1;
return a*myPower(a,b-1);
}
int main()
{
int a=2,b;
for(b=0;b11;b++)
printf("%lf\n",myPower(a,b));
return 0;
}
例子2
#include stdio.h
double myPower(int a,int b)
{
if(0==b) return 1;
if(1==b) return a;
return myPower(a,b%2)*myPower(a*a,b/2);
}
int main()
{
int a=3,b;
for(b=0;b11;b++)
printf("%lf\n",myPower(a,b));
return 0;
}
那个不是返回值,而是调用控制台打应出结果,你对返回的概念还有些误解,一般的返回值都是返回给另一个变量接收的,比如
int prinstar()
{
return 1;
}
int i = prinstrar();
i 就是接收了返回值
我给你从编译器角度考虑下吧!1、首先局部变量的使用范围只有在这个局部范围类有效。2、函数是模块化的思想。比如你有一个判断一个数是否是素数的函数。那么你再求100以内所有素数和的时候,main中会调用这个函数100次。这些函数编译器在处理的时候都是放在一个堆栈的。而且每个函数都占有不同的地址和空间。(递归函数尤为明显)。最关键的是,当函数返回函数值后,函数的使命就结束了。所以这个函数体在呢内存中就销毁了。你即使能从函数中返回一个局部变量。你再去读这个地址的时候。东西都不在了。3、还有一点。编译器在分配函数的空间的时候,地址不是固定的。所以你每次运行程序,你会发现
int
a=3
printf(f"%d",a),不都是一样的。所以你的问题很明了了。
你说的是函数的返回者吧函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。如调用正弦函数取得正弦值。对函数的值(或称函数返回值)有以下一些说明: 1) 函数的值只能通过return语句返回主调函数。 return 语句的一般形式为: return 表达式;或者为: return (表达式);该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个return语句,但每次调用只能有一个return 语句被执行,因此只能返回一个函数值。 2) 函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。 3) 如函数值为整型,在函数定义时可以省去类型说明。 4) 不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。如例8.2中函数s并不向主函数返函数值,因此可定义为: void s(int n) { …… } 一旦函数被定义为空类型后,就不能在主调函数中使用被调函数的函数值了。例如,在定义s为空类型后,在主函数中写下述语句 sum=s(n); 就是错误的。为了使程序有良好的可读性并减少出错, 凡不要求返回值的函数都应定义为空类型。