日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言函数不能返回局部变量的地址

發(fā)布時(shí)間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言函数不能返回局部变量的地址 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在C中,正常情況下,我們只能從函數(shù)中返回一個(gè)值。但在很多情況下,我們需要從函數(shù)中返回多個(gè)值,此時(shí)使用數(shù)組或指針能夠很好地完成這樣的任務(wù)。這里是一個(gè)示例。這個(gè)程序使用一個(gè)整型數(shù)組作為參數(shù),并將數(shù)組元素的和與積返回給調(diào)用函數(shù)。下面是C代碼,這是一種常見(jiàn)情況。下面給出實(shí)現(xiàn)技巧:
  • #include?<stdio.h>?
  • #include?<conio.h>?
  • int*?Pool(int?array[],int?size) ?
  • { ?
  • ???int?*x; ?
  • ???int?i=0; ?
  • ???int?a[2]={0,1}; ?
  • ???for(i=0;i<size;i++) ?
  • ???{ ?
  • ??????a[0]+=array[i];???????????????????????//存儲(chǔ)數(shù)組元素值的和 ?
  • ??????a[1]*=array[i];???????????????????????//存儲(chǔ)數(shù)組元素值的積 ?
  • ???} ?
  • ???//將數(shù)組的基地址賦值給整型指針 ?
  • ???x=&a[0]; ?
  • ???//返回整個(gè)數(shù)組 ?
  • ???return?x; ?
  • } ?
  • ?
  • int?main() ?
  • { ?
  • ???int?a[]={1,2,3,4}; ?
  • ???int?*c;?c?=?Pool(a,4); ?
  • ???printf("Sum?=?%d\nProduct?=?%d\n",c[0],c[1]); ?
  • ???getch(); ?
  • ???return?0; ?
  • }?
  • 這樣,你已經(jīng)學(xué)會(huì)了如何使用數(shù)組和指針從C函數(shù)中返回多個(gè)值。在很多情況下你會(huì)發(fā)現(xiàn)這個(gè)技巧很有用。

    其實(shí)上面的用法是有問(wèn)題的,在C語(yǔ)言中絕不能返回函數(shù)內(nèi)局部變量的地址。

    在c語(yǔ)言中,一種典型的錯(cuò)誤就是將一個(gè)指向局部變量的指針作為函數(shù)的返回值。由于該數(shù)組是局部變量,因此在函數(shù)返回時(shí)其數(shù)組空間已經(jīng)作廢了,即指針應(yīng)用一塊無(wú)意義的地址空間,所以不會(huì)有返回值。

    如果得到正常的值,只能是幸運(yùn)的

    退出函數(shù)的時(shí)候,系統(tǒng)只是修改了棧頂?shù)闹羔?#xff0c;并沒(méi)有清內(nèi)存;
    所以,是有可能正常訪問(wèn)到局部變量的內(nèi)存的。
    但因?yàn)闂J窍到y(tǒng)自動(dòng)管理的,所以該內(nèi)存可能會(huì)被分配給其他函數(shù),這樣,該內(nèi)存的內(nèi)容就會(huì)被覆蓋;不再是原來(lái)的值了。

  • int?main() ?
  • { ?
  • ???int?a[]={1,2,3,4}; ?
  • ???int?*c;?c?=?Pool(a,4);??
  • ? Pool(a,3);? //增加這句
  • ???printf("Sum?=?%d\nProduct?=?%d\n",c[0],c[1]); ?
  • ???getch(); ?
  • ???return?0; ?
  • }?
  • 得到的結(jié)果跟上面就不一樣了




    總結(jié)

    以上是生活随笔為你收集整理的C语言函数不能返回局部变量的地址的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。