這是C中一個(gè)很典型的問(wèn)題,傳值和傳地址值的區(qū)別:
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了安國(guó)免費(fèi)建站歡迎大家使用!
傳值方式:
void jtf(float x0,float h,float a,float b),這樣傳的a和b就是傳值,傳參的時(shí)候會(huì)構(gòu)造一個(gè)a和b的副本對(duì)象,在函數(shù)jtf中對(duì)a和b所做的任何操作都是對(duì)副本對(duì)象的操作,和原來(lái)的a b毫無(wú)關(guān)系,原來(lái)的a b的值不會(huì)改變。
傳地址值方式:
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);//指針
使用引用和指針即是傳地址值方式, 傳遞的是原來(lái)的a b的地址,在函數(shù)jff中所做的所有操作都是針對(duì)a b本身的.所做的改變也會(huì)保留.
很顯然, 你的程序應(yīng)該是用第二種方式的.
首先函數(shù):char
strcat
(char
x[],char
y[])返回值是char型
你在函數(shù)中卻返回char型指針。
其次for語(yǔ)句:for
(i
=
m;i
=
m
+
n;i
++)
m+n要大于x,y字符串的長(zhǎng)度,可能會(huì)越界。
遞歸函數(shù)myPower的定義有邏輯錯(cuò)誤,改成:
double myPower(int a,int b)
{
if(0==b) return 1;
return a*myPower(a,b-1);
}
如果改成這樣,會(huì)更高效:
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;
}
那個(gè)不是返回值,而是調(diào)用控制臺(tái)打應(yīng)出結(jié)果,你對(duì)返回的概念還有些誤解,一般的返回值都是返回給另一個(gè)變量接收的,比如
int prinstar()
{
return 1;
}
int i = prinstrar();
i 就是接收了返回值
我給你從編譯器角度考慮下吧!1、首先局部變量的使用范圍只有在這個(gè)局部范圍類有效。2、函數(shù)是模塊化的思想。比如你有一個(gè)判斷一個(gè)數(shù)是否是素?cái)?shù)的函數(shù)。那么你再求100以內(nèi)所有素?cái)?shù)和的時(shí)候,main中會(huì)調(diào)用這個(gè)函數(shù)100次。這些函數(shù)編譯器在處理的時(shí)候都是放在一個(gè)堆棧的。而且每個(gè)函數(shù)都占有不同的地址和空間。(遞歸函數(shù)尤為明顯)。最關(guān)鍵的是,當(dāng)函數(shù)返回函數(shù)值后,函數(shù)的使命就結(jié)束了。所以這個(gè)函數(shù)體在呢內(nèi)存中就銷毀了。你即使能從函數(shù)中返回一個(gè)局部變量。你再去讀這個(gè)地址的時(shí)候。東西都不在了。3、還有一點(diǎn)。編譯器在分配函數(shù)的空間的時(shí)候,地址不是固定的。所以你每次運(yùn)行程序,你會(huì)發(fā)現(xiàn)
int
a=3
printf(f"%d",a),不都是一樣的。所以你的問(wèn)題很明了了。
你說(shuō)的是函數(shù)的返回者吧函數(shù)的值是指函數(shù)被調(diào)用之后,執(zhí)行函數(shù)體中的程序段所取得的并返回給主調(diào)函數(shù)的值。如調(diào)用正弦函數(shù)取得正弦值。對(duì)函數(shù)的值(或稱函數(shù)返回值)有以下一些說(shuō)明: 1) 函數(shù)的值只能通過(guò)return語(yǔ)句返回主調(diào)函數(shù)。 return 語(yǔ)句的一般形式為: return 表達(dá)式;或者為: return (表達(dá)式);該語(yǔ)句的功能是計(jì)算表達(dá)式的值,并返回給主調(diào)函數(shù)。在函數(shù)中允許有多個(gè)return語(yǔ)句,但每次調(diào)用只能有一個(gè)return 語(yǔ)句被執(zhí)行,因此只能返回一個(gè)函數(shù)值。 2) 函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應(yīng)保持一致。如果兩者不一致,則以函數(shù)類型為準(zhǔn),自動(dòng)進(jìn)行類型轉(zhuǎn)換。 3) 如函數(shù)值為整型,在函數(shù)定義時(shí)可以省去類型說(shuō)明。 4) 不返回函數(shù)值的函數(shù),可以明確定義為“空類型”,類型說(shuō)明符為“void”。如例8.2中函數(shù)s并不向主函數(shù)返函數(shù)值,因此可定義為: void s(int n) { …… } 一旦函數(shù)被定義為空類型后,就不能在主調(diào)函數(shù)中使用被調(diào)函數(shù)的函數(shù)值了。例如,在定義s為空類型后,在主函數(shù)中寫(xiě)下述語(yǔ)句 sum=s(n); 就是錯(cuò)誤的。為了使程序有良好的可讀性并減少出錯(cuò), 凡不要求返回值的函數(shù)都應(yīng)定義為空類型。
網(wǎng)頁(yè)題目:C語(yǔ)言函數(shù)值不能返回,c語(yǔ)言函數(shù)沒(méi)有返回值是什么意思
文章地址:http://jinyejixie.com/article38/dssdjsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、App設(shè)計(jì)、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、虛擬主機(jī)、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)