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