㈠ 函數內的局部靜態變數為什麼在其他函數內無法訪問
除非調用這個函數,否則函數內的什麼變數在其他函數內都無法訪問。你的意思可能是認為「靜態變數是永久性的,所以在其他函數內應該可以訪問」,但事實是函數內的靜態變數也是「局部」變數,所以它只能在聲明它的函數內部可見。
㈡ c語言編程 局部變數 foo函數返回之後它的棧幀就要釋放掉 它的地址就沒有了啊,為什麼還能列印出來
同學你好!我以前也研究過你這個問題,在自定義函數里申請變數,返回他的地址。按照道理說局部變數離開了他的作用域,將不能再被訪問,意思是他的變數名失去了他的意義,那麼變數里的值還在不在了呢?在沒有加static的情況下,局部變數保存在動態存儲區,如果這個區域暫時沒有寫入其他的值,原來變數的值還是保留在那裡的,比如你保留了他的地址就還有可能訪問到那片空間,但這並非絕對。我經過多次的研究發現,即使保留了不在作用域內局部變數的地址,也有可能訪問不到他原來的值,而且你在編譯的時候編譯器會給出一個warning,那麼我最後得出的結論是,這樣返回局部變數的地址是不安全的(有可能值還沒被覆蓋掉還在那裡,有可能就沒有了)。建議還是不要這么做!
㈢ 請教高手,C語言中,把變數定義在主函數之外和定義在主函數之內有什麼區別
兩者的區別只在於作用域和生存周期。main函數是一個進程的入口,此外,和別的函數無區別。
1、main函數里定義的是局部變數,只是在main函數里有效。
2、如果程序里有多個函數,定義的全局變數在這些函數里都可以使用,而在main中定義的只能在main中使用,其他函數不可以直接調用。
3、題目中的兩個程序的區別只在於程序一的a和s變數是全局變數,程序二的a和s變數是局部變數。
4、全局變數是程序的各個函數都可以調用的,而局部變數只在函數內部有效。
(3)其他函數可以訪問局部變數嗎擴展閱讀:
全局變數是編程術語中的一種,源自於變數之分。
變數分為局部與全局,局部變數又可稱之為內部變數。由某對象或某個函數所創建的變數通常都是局部變數,只能被內部引用,而無法被其它對象或函數引用。
全局變數既可以是某對象函數創建,也可以是在本程序任何地方創建。全局變數是可以被本程序所有對象或函數引用。
局部變數(Local variables)指在程序中只在特定過程或函數中可以訪問的變數。局部變數是相對於全局變數而言的。在C++、C#、Ruby這些面向對象語言中,一般只使用局部變數。
面向對象編程是現在普遍採用的是軟體開發方法,因此無需考慮是局部變數還是全局變數,說到變數,往往都是局部變數。
㈣ 在js中局部函數可以訪問外部函數的局部變數嗎
很簡單,你不需要在函數裡面申明一個局部變數,直接申請static變數。這個是靜態文件作用域變數。任何函數都可以訪問。但是你必須要寫到所有函數外部定義。很簡單的事,不要太復雜化
㈤ C#中被調用函數能訪問並修改調用它的函數局部變數嗎,用什麼方法可以實現
publicvoidf1()
{
stringstr1="a";
stringstr2=f2(outstr1);
}
publicstringf2(outstringstr)
{
str="b";
return"c";
//在這里可以修改str1的值嗎,有什麼方法
}
//如上代碼,這時候,str1會修改成b
㈥ C++中將一變數在一函數中定義為局部靜態變數,可以再把這個變數在主函數中定義為動態變數嗎它的值在
不可以。C++的作用域從來沒有聽說過能夠後期更改的,變數的作用域在聲明的時候就已經確定,你只能更改它的值,卻不能更改它的作用域。下面舉個例子理解局部靜態變數和動態變數:
1.首先理解局部靜態變數:局部靜態變數只初始化一次,該局部靜態變數生命周期貫穿函數(該聲明所在)調用之後的時間。為了更加清楚,舉個例子,右邊為運行結果
注意事項:
不管是什麼類型的變數,我們都得注意它的作用域,以及它初始化幾次,不然會在這種小地方犯錯,導致整個項目有問題,而且排查起來很煩人。
㈦ 閉包內層函數可以將外層函數的局部變數進行封裝,封閉後就只有內層函數才能訪問到外層函數的局部變數嗎
js的函數可以當作像object, array之類的類型一樣作為變數的值使用, 如果在一個函數里創建另外一個函數並且內部的函數使用到了外面的函數的變數那麼就構成一個閉包, 這個外面的函數的變數的值會為閉包的函數一直保存直到閉包函數被內存回收掉為止
用處有很多, 熟悉之後基本是要用到自然就會去用了. 有很多時候閉包的變數是當作c里static變數使用或者只是為了當個namespace避免全局命名空間被污染, 例如
varcount=(function(){
varnum=1;
returnfunction(){returnnum++;};
})();
相當於
varnum=1;
functioncount(){returnnum++;}
不直接用第二種只是為了防止var num被直接加到window里
㈧ 局部變數的作用域可用於其它函數的調用 這句話是否是對的,為什麼
這句話不準確,如果在main函數裡面定義的變數在main函數的作用范圍里可以傳遞給其他函數,如果在除主函數的其他函數的里的局部變數會隨著函數的結束而釋放空間,所以不能再供別的函數傳遞參數。而main函數的局部變數時程序運行完後才釋放空間的,程序運行完錢可以傳遞給其他函數
㈨ 在課本上看到這么句話:主函數中定義的局部變數只能在主函數中使用,其他函數不能使用。那麼主函數中定義
"主函數中定義的局部變數只能在主函數中使用,其他函數不能使用。"
這句話有不妥
如當 形參是 引用類型時,其他函數則可以訪問實參
#include<stdio.h>
voidfun(int&a){
a++;
}
voidmain(){
intn=12;
fun(n);
printf("%d ",n);
getchar();
}
輸入結果 是13
㈩ 關於是否一個函數內聲明的局部變數能被另一個函數訪問
首先,變數是有作用范圍和生命周期的,這個你需要明確。
類成員變數:
作用范圍,通過關鍵字來實現,public、private。。。
生命周期,該類被載入實例化後--該類結束
方法成員變數:
作用范圍,該方法內部
生命周期,隨著方法的生命周期
故此,一個函數的變數是否可以被另外一個函數使用,得看該變數的具體范圍和生命周期