關於c語言中返回值和返回指標的問題。

2021-06-06 03:26:53 字數 640 閱讀 2767

int  testa  (void)  

char  *  testb  (void)  

int  main()  

對於返回值的情況:  

testa與main函式同在棧區,testa結束時c++建立臨時變數,然後將返回值複製給該臨時  

變數。  

printf(  "  the  value  of  testa  is  %d  n",  testa()  )  時輸出的是該臨時變數的值,testa中的b已經不存在。  

對於返回指標的情況:  

型別,所以c++會首先建立乙個char  *型別的臨時變數,再把該陣列的首位址賦給臨時變數;  

函式結束後該陣列也就被銷毀,這就意味著臨時變數指向了乙個「未宣告的位址」,幸運的情況下,這段記憶體暫時還沒有被其他的資料所覆蓋,因此還能輸出正確的內容。  

在testb裡面,如果換成char*  str="abc";return  str;  由於這時str指向的是全域性資料區的一段記憶體位址,所以函式結束後臨時變數也指向該位址,所以編譯器不會提出警告。但這樣的方法是不推薦的。  

返回引用:  

這中情況的效率最高,它直接返回乙個物件,不產生返回值的副本。但同時也要注意避免返回區域性引用的情況。

C語言函式返回值為指標和函式返回值為void

有時遇到函式返回值為空和函式返回值為指標的情況下,需要在前面定義該函式 函式的返回值為指標也必須在此定義,函式的返回值為void必須在此定義,返回值是整形或者其他基本型別不需要在此定義 函式功能 把格式化的資料寫入某個字串 函式原型 int sprintf char buffer,const cha...

C語言 void不能返回值,指標來返回

題目 請編寫函式void fun int x,int pp,int n 它的功能是 求出能整除x且不是偶數的各整數,並按從小到大的順序放在pp所指的陣列中,這些除數的個數通過形參n返回。例如 若x中的值為30,則有4個數符合要求,它們是1 3 5 15。注意 請勿改動主函式main和其他函式中的任何...

C語言中scanf 函式的返回值

c語言中簡單的輸入scanf函式和輸出printf函式,我們經常使用,也很熟悉,但有時卻還是會在這兩個地方犯錯。scanf 函式 功 能 執行格式化輸入 用 法 int scanf char format argument,scanf 函式是通用終端格式化輸入函式,它從標準輸入裝置 鍵盤 讀取輸入的...