1. c語言中,函數返回值怎麼用
就你的函數功能而言,可以使用指針和引用的方法來交換兩個變數的值。用返回值的方式有點多餘,因為c語言函數只能返回一個結果,如果要返回多個值,則需要寫成一個結構體返回,但這樣其實返回的仍然是一個臨時變數,並沒有交換兩個變數的值,所以不符合你的需求
2. c語言的問題 警告 1 warning C4172: 返回局部變數或臨時變數的地址
return (char*)u8buf; 因為 u8buf是局部變數, 出函數體後, 變數佔用的空間就被釋放了, 你把u8buf地址返回 會有警告的.
另外這個定義const char* u8buf[128]; 我不知你是不是這樣想的, 這是定義了一個指針數組而不是字元數組, u8buf 是可以放128個指針的數組.
3. c語言返回值怎麼理解
子函數的返回值,main主函數也是有返回值的,但是一般用不到都忽略掉了,一般來說的返回值就是子函數的返回值。當需要一個函數去處理數據時,如求平方,這時候求平方後的值可以有兩種方法表達,
以值的形式返回給你,即return x,這樣就可以利用這個結果了,此時函數名前當然要加返回的數據類型了。
當不需要對這一結果進一步處理時,直接printf,這樣可以直接在終端上顯示結果了,這時就沒必要去加了,直接VOID。
常量與變數
常量其值不可改變,符號常量名通常用大寫。
變數是以某標識符為名字,其值可以改變的量。標識符是以字母或下劃線開頭的一串由字母、數字或下劃線構成的序列,請注意第一個字元必須為字母或下劃線,否則為不合法的變數名。變數在編譯時為其分配相應存儲單元。
如果一個變數名後面跟著一個有數字的中括弧,這個聲明就是數組聲明,它們以ASCII的NULL作為數組的結束。要特別注意的是,中括弧內的索引值是從0算起的。
4. c語言返回值具體是指什麼
子函數的返回值,main主函數也是有返回值的,但是一般用不到都忽略掉了,一般來說的返回值就是子函數的返回值。當需要一個函數去處理數據時,如求平方,這時候求平方後的值可以有兩種方法表達
1、以值的形式返回給你,即return x,這樣就可以利用這個結果了,此時函數名前當然要加返回的數據類型了
2、當不需要對這一結果進一步處理時,直接printf,這樣可以直接在終端上顯示結果了,這時就沒必要去加了,直接VOID
(4)c語言返回值臨時變數擴展閱讀
void:聲明函數無返回值或無參數,聲明無類型指針,顯示丟棄運算結果。(C89標准新增)
如果一個變數聲明時在前面使用 * 號,表明這是個指針型變數。換句話說,該變數存儲一個地址,而 * 則是取內容操作符,意思是取這個內存地址里存儲的內容。指針是 C 語言區別於其他同時代高級語言的主要特徵之一。
指針不僅可以是變數的地址,還可以是數組、數組元素、函數的地址。通過指針作為形式參數可以在函數的調用過程得到一個以上的返回值,不同於return(z)這樣的僅能得到一個返回值。
5. C語言規定,函數返回值的類型由什麼決定
c語言規定,函數返回值的類型是由函數首部定義的類型決定。函數返回值應與首部定義的類型一致,如若不一致,則自動將返回值強制轉換為函數首部定義的類型。沒有定義類型時默認為int型。
也就是說你的函數是什麼類型,返回值就是什麼類型。
比如:
函數定義 int fun(int a,char b)
返回值就是整型
函數定義 int *fun(int a)
返回值就是基類型為整型的指針
函數定義 void fun(int a)
無返回值
(5)c語言返回值臨時變數擴展閱讀
函數可以有返回值,只要 return 就可以給出一個,不過常常不用它,有兩個原因:
1、C/C++里返回值是復制出去的,而對於大的對象,復制的代價很高;
2、有些對象是不能復制的,至少編譯器不知道怎麼復制,比如數組。
於是有了下面這樣的函數:
bool GetObj(ObjType& obj);
bool Encode(const char* src, char* dest);
用一個參數來代替返回值,而返回值只是指示函數執行是否成功。
返回一個大對象是困難的,但這個困難存在於 C 程序中,而不是 C++ 程序中。 C 函數里較少通過返回一個指針來返回對象,因為:
1、如果指針指向棧變數,毫無疑問,要麼不用這個返回值,要麼是一個錯誤;
2、如果指針指向堆變數,需要用這個函數的程序員會好好的看文檔且足夠細心會調用 free,要麼就是內存泄漏;
3、如果指針指向 static 變數,那麼用這個函數的程序員牢牢記住「下次調用這個函數以後,上次的返回值也會跟著變」。
在C++里直接返回裸指針的話,情況並不會有什麼起色,不過 C++ 有智能指針的,通常它們指向堆變數,佔用的空間和裸指針一樣大。考慮前面第一個函數,寫成:
std::auto_ptr<ObjType> GetObj();
返回值如果不要,作為臨時變數,會立即被析構,返回的對象被釋放;如果需要,就得賦值給另一個智能指針。總之不用程序員記得,編譯器會保證這個對象的釋放。
考慮第二個函數,稍微有一點麻煩,因為 auto_ptr 是不能用來持有數組的,不過,在C++的世界裡,std::string 幾乎總是比 char* 好用:
std::auto_ptr<std::string> Encode(const char* src);
最後考慮最麻煩的情況:
bool AssembleObjList(ObjType objList[], size_t length);
6. C語言中函數返回什麼類型的變數哪些可以是臨時,哪些必須是靜態或全局
這要看具體的使用情景了:
比如說我現在在別人家做客,要喝水,拿一次性杯子,臨時的,喝完就扔
但是我自己在家喝水和出去旅遊,需要同一個杯子,就是靜態的,出門和在家都能用,但是不能同時用
簡單來說,臨時變數就是不需要跨函數、跨線程和進程的時候使用,作用范圍比較小,但是使用頻率最高,不需要考慮多線程安全
靜態變數可以在函數內定義,但是共用的,可以被更改和調用,程序不死則一直存在
全局變數與靜態變數類似,但是要定義在所有函數以外,需要小心被多線程更改
我語言有點雜亂,看一下摘抄吧
靜態局部變數屬於靜態存儲方式,它具有以下特點:
(1)靜態局部變數在函數內定義,但不象自動變數那樣,當調用時就存在,退出函數時就消失。靜態局部變數始終存在著,也就是說它的生存期為整個源程序。
(2)靜態局部變數的生存期雖然為整個源程序,但是其作用域仍與自動變數相同,即只能在定義該變數的函數內使用該變數。退出該函數後, 盡管該變數還繼續存在,但不能使用它。
(3)允許對構造類靜態局部量賦初值。若未賦以初值,則由系統自動賦值。數值型變數自動賦初值0,字元型變數賦空字元。
(4)對基本類型的靜態局部變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。 根據靜態局部變數的特點, 可以看出它是一種生存期為整個源文件的量。雖然離開定義它的函數後不能使用,但如再次調用定義它的函數時,它又可繼續使用, 而且保存了前次被調用後留下的值。 因此,當多次調用一個函數且要求在調用之間保留某些變數的值時,可考慮採用靜態局部變數。雖然用全局變數也可以達到上述目的,但全局變數有時會造成意外的副作用,因此仍以採用局部靜態變數為宜。
7. c語言中return語句的具體作用是什麼返回值是幹嘛的,誰向誰返值,返到哪裡請回答的具體點,謝謝!
在函數中,如果碰到return 語句,那麼程序就會返回調用該函數的下一條語句執行,也就是說跳出函數的執行,回到原來的地方繼續執行下去。但是如果是在主函數中碰到return語句,那麼整個程序就會停止,退出程序的執行。
1.return語句不可返回指向「棧內存」的「指針」或「引用」,因為「棧內存」的空間在函數體結束時,自動被銷毀,指向這里的指針就會出錯!
要搞清楚返回的究竟是「值」、「指針」、還是「引用」。
例如:
char * Function(void)
{
char str[]="Hello,world!"; //str的內存是在Function這個函數的棧上的
return str; //這里就會出錯,返回時,str已經不知道指向哪裡了
}
2.因為返回值的不同,處理的方法也不同,否則會出錯的
3.如果函數返回的值是一個對象,那麼就要考慮return語句的效率了!
例如:代碼1
return String(str1+str2);
這是臨時對象的語法,表示「創建一個臨時對象,並返回它」。但是它並不 與 「先創建一個
局部對象temp,然後返回它的結果」等價!!
實際上它們差了很多了!
上面的 代碼2 執行時,將發生三件事:
1:temp對象被創建,同時完成初始化;
2:拷貝構造函數把temp拷貝到保存返回值的外部存儲單元中;
3:temp在函數結束時被銷毀。
但是代碼1執行時跟代碼2不同:編譯器直接把臨時變數創建並初始化在外部存儲單元里,省去了拷貝和
析構的過程,也就少了這部分的時間開銷,提高了效率。所以,返回任何結構或類的對象時,一定要這
樣做!
另外,return int(x+y);這樣的語句不要寫成:temp=int(x+y);return temp;
雖然象int,float,double 等數據類型不存在拷貝析構的問題,不會提高多少效率,但寫出來的語句更簡潔,
看來也清楚的多!
8. C語言中返回值是什麼意思有什麼用
說來話長。c語言中,首先,返回值是函數的返回值;然後,函數的函數名被作為一個變數處理;最後,函數的處理結果數據帶回給調用函數作為返回值就被值賦給了(函數名)變數的。這個返回值可以用來判斷函數被調用後的運行處理結果,函數細致的返回值可以判斷出在被調用中的走向流程。返回值可有可無。