久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 子函數(shù)定義的局部變量問題求助 [打印本頁]

作者: cjjdemon    時(shí)間: 2022-8-27 14:41
標(biāo)題: 子函數(shù)定義的局部變量問題求助
各位高手,請(qǐng)求局部變量的問題,幫忙看一下以下程序
char f1(char x)
{
   char y;
   y=一頓計(jì)算; (計(jì)算過程還有可能再調(diào)用其它子函數(shù))
   return y
}

void f2()
{
    char a;
    char b;
    a=1;
    b=f1(x);
}

想問,a得到的數(shù)值,會(huì)不會(huì)因?yàn)檎{(diào)用了f1函數(shù)之后,變成其它值了?
我用實(shí)際程序試過,a偶發(fā)性的變成非1的值,找不到原因。


作者: haiyang201    時(shí)間: 2022-8-27 15:47
一般不會(huì)變  
作者: 624353765    時(shí)間: 2022-8-27 15:57
局部變量會(huì)改變的
作者: gd2051    時(shí)間: 2022-8-27 17:04
一般不會(huì);這個(gè)問題很有可能與編譯器優(yōu)化等級(jí)有一點(diǎn)關(guān)系。
作者: littlespider    時(shí)間: 2022-8-27 18:12
有可能,這要看調(diào)用的函數(shù)是什么,一般都是指針未正確初始化造成的。例如函數(shù)里有下面類似的語句

char* p;
*p = 0; //指針還未初始化就使用,如果此時(shí)指針恰巧指向a的地址,a值就會(huì)被修改
作者: xuyaqi    時(shí)間: 2022-8-27 18:18
你 a 定義為局部變量,只在 f2() 內(nèi)保持不變,出了f2() 就會(huì)變,應(yīng)該定義為全局變量。
作者: 188610329    時(shí)間: 2022-8-27 18:46
void f2()
{
    char a;
    char b;
    a=1;
    b=f1(x);
}

a是臨時(shí)變量, 當(dāng)運(yùn)行完 b=f1(x) 之后, a 是不會(huì)再用到了, 所以,這個(gè)時(shí)候 a 就被拋棄了。如果:
void f2()
{
    char a;
    char b;
    a=1;
    b=f1(x);
    a++;
}
那么, 運(yùn)行   b=f1(x); 時(shí), 才會(huì)把 a 保護(hù)起來。

作者: 飛云居士    時(shí)間: 2022-8-27 22:12
語法上沒問題,可能是RAM溢出(RAM不夠用了,一通計(jì)算占用太多RAM)。
作者: wpppmlah    時(shí)間: 2022-8-27 23:55
局部變量a 的生命周期,被局限在子函數(shù)f2()中,當(dāng)執(zhí)行完f2()中最后一行語句b=f1(x);后它的生命就完結(jié)了,至于會(huì)變成什么值,那也就聽天由命了。這是我的理解,不知道對(duì)不對(duì)。還請(qǐng)大家指正
作者: Hephaestus    時(shí)間: 2022-8-28 07:59
新手的通病,一旦找不到問題所在就會(huì)懷疑編譯器。
作者: coody_sz    時(shí)間: 2022-8-28 09:27
原則上,調(diào)用函數(shù)不會(huì)改變本函數(shù)的局部變量,但是樓主的例子中,局部變量給了一個(gè)值,后面卻沒有使用,則編譯以可能會(huì)優(yōu)化掉,因?yàn)榫幾g器覺得給局部變量一個(gè)值但又不使用,指令就沒有意義,優(yōu)化掉。
作者: frank_tw    時(shí)間: 2022-8-28 10:10
可能是堆疊空間不足
作者: 奮斗的小白熊    時(shí)間: 2022-8-28 11:48
個(gè)人理解是有可能會(huì)變,雖然a是f2中的局部變量,離開f2函數(shù)后,如果調(diào)用的其他函數(shù)中有指針指向了a的地址,也有可能會(huì)變。
作者: Hephaestus    時(shí)間: 2022-8-28 14:32
奮斗的小白熊 發(fā)表于 2022-8-28 11:48
個(gè)人理解是有可能會(huì)變,雖然a是f2中的局部變量,離開f2函數(shù)后,如果調(diào)用的其他函數(shù)中有指針指向了a的地址, ...

是f2()調(diào)用的f1(),執(zhí)行f1()的時(shí)候絕對(duì)不是“離開了”f2(),你的理解完全錯(cuò)誤。
作者: xxxevery    時(shí)間: 2022-8-28 18:29
從程序上看a就是一個(gè)賦值為1的局部變量,跟其他沒啥關(guān)系,樓主說a偶爾會(huì)變是在什么時(shí)候輸出的,在f2()函數(shù)內(nèi)輸出的話一般是不可能的,除非編譯上有警告你沒注意;如果是在f2()函數(shù)外輸出的話那確實(shí)會(huì)出錯(cuò),因?yàn)閍出了函數(shù)f2后就會(huì)被系統(tǒng)銷毀,這時(shí)你在原變量的地址取值會(huì)得到一個(gè)隨機(jī)值
作者: Hephaestus    時(shí)間: 2022-8-28 22:48
xxxevery 發(fā)表于 2022-8-28 18:29
從程序上看a就是一個(gè)賦值為1的局部變量,跟其他沒啥關(guān)系,樓主說a偶爾會(huì)變是在什么時(shí)候輸出的,在f2()函 ...

你的理解也是錯(cuò)誤的。在f2()函數(shù)以外輸出的時(shí)候,a根本就不存在,你怎么在f2()以外輸出a的,寫一句代碼讓我也樂一樂。當(dāng)然按我在14樓的說法,f2()調(diào)用f1(),在f1()內(nèi)輸出不屬于f2()以外。
作者: cjjdemon    時(shí)間: 2022-8-29 17:20
反正我 現(xiàn)在只能把a(bǔ)定義為全局變量才能保證a的值穩(wěn)定不變。f2()下面還有其它語句的,不是把a(bǔ)賦1后就不用了。所以這個(gè)局部變量有時(shí)候真的搞不明白。
作者: xxxevery    時(shí)間: 2022-8-29 20:37
Hephaestus 發(fā)表于 2022-8-28 22:48
你的理解也是錯(cuò)誤的。在f2()函數(shù)以外輸出的時(shí)候,a根本就不存在,你怎么在f2()以外輸出a的,寫一句代碼讓 ...

我的意思是樓主在什么時(shí)候用什么辦法看到a是非1的值的,是用串口輸出的還是軟件仿真的等等,這點(diǎn)很重要,很多時(shí)候看到的并不一定是真實(shí)的。初學(xué)者寫出非法調(diào)用局部變量的值的語句經(jīng)常都會(huì)發(fā)生,編譯器也不是每次都報(bào)錯(cuò)。
作者: Hephaestus    時(shí)間: 2022-8-29 23:02
cjjdemon 發(fā)表于 2022-8-29 17:20
反正我 現(xiàn)在只能把a(bǔ)定義為全局變量才能保證a的值穩(wěn)定不變。f2()下面還有其它語句的,不是把a(bǔ)賦1后就不用了 ...

其實(shí)你的問題并沒有解決,如果確實(shí)如你所述,a作為局部變量被意外更改的話,那么原因基本可以肯定是數(shù)組訪問越界造成的,你改成全局變量,a的存儲(chǔ)位置發(fā)生了變化,不會(huì)被意外改變,但是會(huì)有一個(gè)你想象不到的變量被意外改變,然后……就是很難解決的bug。
作者: xxxevery    時(shí)間: 2022-8-30 14:50
我也是服了樓主,下面還有程序你不貼上來,那我們哪知道你對(duì)a進(jìn)行了什么操作,它是不是就該要變化呢,要不你就把函數(shù)程序都貼出來大家分析分析,要不你就繼續(xù)稀里糊涂就算了




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品视频一二三区 | 精国产品一区二区三区四季综 | 日韩欧美在线一区二区 | 毛片免费观看视频 | 欧美日一区 | 日韩在线免费 | 欧美日韩精品一区二区三区视频 | 91色网站 | 日韩中文字幕 | 国产精品久久久av | 成人欧美一区二区三区黑人孕妇 | 中文字幕视频一区二区 | 亚洲精品久久久一区二区三区 | 日韩欧美亚洲一区 | 午夜精品久久久久99蜜 | 色吧综合网 | 丝袜一区二区三区 | 在线观看亚洲专区 | 久久精品网 | 欧美在线日韩 | www.国产精品 | 色吧综合网| 欧美精产国品一二三区 | 亚洲成av人片在线观看无码 | 四虎永久免费黄色影片 | 成年人免费网站 | 亚洲欧美一区二区三区视频 | 91中文视频| 久久久久久久久久久久久久久久久久久久 | 中文字幕成人 | 国产成人综合久久 | 97久久久久久 | 精品在线播放 | 日日干日日射 | 色爽女| 亚洲日本欧美日韩高观看 | 国产一级黄色网 | 国产在线视频在线观看 | 天天看片天天干 | 亚洲一区二区三区在线视频 | 高清国产一区二区 |