第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

從C中的函數(shù)返回局部變量

從C中的函數(shù)返回局部變量

C C++
慕的地6264312 2019-06-06 10:41:15
從C中的函數(shù)返回局部變量#include <stdio.h>int foo1(void){     int p;     p = 99;     return p;}char *foo2(void){     char buffer[] = "test_123";     return buffer;}int *foo3(void){     int t[3] = {1,2,3};     return t;}int main(void){     int *p;     char *s;     printf("foo1: %d\n", foo1());     printf("foo2: %s\n", foo2());     printf("foo3: %d, %d, %d\n", p[0], p[1], p[2]);     return 0;}當(dāng)我用gcc -ansi -pedantic -W -Wall編譯器為foo 2()和foo 3()發(fā)出警告消息:warning: function returns address of local variable我認(rèn)為它不允許返回局部變量,但是foo 1()工作得很好,返回指向本地對(duì)象的指針與對(duì)象本身似乎有很大的區(qū)別。有人能說(shuō)明一下這個(gè)問(wèn)題嗎?提前謝謝!
查看完整描述

3 回答

?
躍然一笑

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊

這里的問(wèn)題是,當(dāng)您創(chuàng)建局部變量時(shí),它在堆棧上分配,因此在函數(shù)完成執(zhí)行后不可用(這里的實(shí)現(xiàn)有所不同)。最好的方法是使用malloc()保留非本地內(nèi)存。這里的危險(xiǎn)是你必須交易(free())使用malloc(),如果您忘記了,則會(huì)造成內(nèi)存泄漏。


查看完整回答
反對(duì) 回復(fù) 2019-06-06
?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊

foo1(),您返回一個(gè)復(fù)制局部變量,而不是局部變量本身。

對(duì)于其他函數(shù),可以返回指向局部變量的指針的副本。但是,當(dāng)函數(shù)結(jié)束時(shí),局部變量將被解除分配,因此,如果以后嘗試引用它,最終會(huì)出現(xiàn)一些棘手的問(wèn)題。


查看完整回答
反對(duì) 回復(fù) 2019-06-06
?
SMILET

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

任何變量在內(nèi)存中都有一些空間。指針引用該空間。當(dāng)函數(shù)調(diào)用返回時(shí),局部變量占用的空間將被取消分配,這意味著它可以并且將被重用于其他事情。因此,對(duì)那個(gè)空間的引用最終會(huì)指向完全不相關(guān)的東西。C中的數(shù)組是作為指針實(shí)現(xiàn)的,因此這將最終應(yīng)用于它們。函數(shù)中聲明的常量數(shù)組也算作本地?cái)?shù)組。

如果要在創(chuàng)建數(shù)組的函數(shù)的作用域之外使用數(shù)組或其他指針,則需要使用malloc為其保留空間。使用malloc保留的空間在通過(guò)調(diào)用空閑顯式釋放之前不會(huì)重新分配或重用。


查看完整回答
反對(duì) 回復(fù) 2019-06-06
  • 3 回答
  • 0 關(guān)注
  • 624 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)