程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c語言中返回值和返回指針的問題

c語言中返回值和返回指針的問題

編輯:關於C語言

int  testA  (void)
{
int  b  =  1  ;
return  b;
}
char  *  testB  (void)
{
char  str[]  =  "abc" ;
return  str;
}
int  main()
{
printf(  "  the  value  of  testA  is  %d  \n",  testA()  );
printf(  "  the  value  of  testB  is  %c  ",  *(  testB()  )  ) ;
}

對於返回值的情況:

testA與main函數同在棧區,testA結束時C++創建臨時變量,然後將返回值復制給該臨時

變量。

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

對於返回指針的情況:

這是最復雜的部分。首先,對於上面的情形:返回一個數組的首地址,由於是返回char  *

類型,所以C++會首先創建一個char  *類型的臨時變量,再把該數組的首地址賦給臨時變量;

函數結束後該數組也就被銷毀,這就意味著臨時變量指向了一個“未聲明的地址”,幸運的情況下,這段內存暫時還沒有被其他的數據所覆蓋,因此還能輸出正確的內容。

在testB裡面,如果換成char*  str="abc";return  str;  由於這時str指向的是全局數據區的一段內存地址,所以函數結束後臨時變量也指向該地址,所以編譯器不會提出警告。但這樣的方法是不推薦的。

返回引用:

這中情況的效率最高,它直接返回一個對象,不產生返回值的副本。但同時也要注意避免返回局部引用的情況。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved