1樓:
首先樓主不要把靜態區和常量區搞混。
char s=aaaa";/aaaa"分佈在棧區,而不是常量區,這點樓主可以通過取位址來看看。出了括號就是否了,所以產生了懸垂指標。
char *s="aaaa";/aaaa"分佈在常量區,所以出了括號後沒有被釋放,所以可以返回。
關於區域性指標變數
2樓:網友
首先,函式完成後,這個指標p肯定是無效了,至於這個位址是否還儲存著這個數值,要細說。
區域性指標按照c語言規範,應該先new,用完後delete。在delete後,指標失效,這個位址成為空位址,交給系統,可以分配給其它用途使用。
如果沒有使用,並且沒有其它對該位址的操作,理論上,這個位址上的值依然還是原來的值,但是,因為沒有程式對該位址沒有了有效宣告,如果對該位址進行讀取操作,存在很大的不可預知性,因為win系統是執行緒併發管理的,該位址隨時可能被其它程式佔用、更改。
另外,很多c的編譯器都具有容錯和異常處理,區域性指標沒有delete會存在很多情況,建議養成良好的指標操作習慣。
3樓:網友
給個程式。
#include
#include
using namespace std;
const int arraylen = 15;
int * function()
return array; //返回陣列的首位址,array是常量指標(或常量指標,我分不清)
void main()
for (int j = 0; j < arraylen; j++)
4樓:網友
p 是棧裡面的, fun 執行完, 棧釋放, p 變數銷燬了, 如果 p 指向堆裡的變數或全域性變數或靜態區域性變數, fun執行結束了依然可以引用 p 指向的變數。
5樓:夏侯又松
沒有啊 你定義了乙個函式在主函式外執行,在函式內定一樂乙個指標變數p用來存放變數的位址, 但是並沒有給它賦值,所以沒有值。
6樓:hely小妞
不會儲存,區域性變數函式執行完後就會釋放空間。
7樓:網友
區域性變數的生存週期問題,fun函式執行完,p的生命即終結。
8樓:晨陽的知道
存在,需要手動釋放變數。
9樓:俞運
沒有指標了,指標生命結束了。
10樓:赤心
隨著主程式的結束而結束。
c語言中區域性變數和全域性變數的生存日期分別為什麼
11樓:網友
區域性變數只在本函式內使用有效,在函式之外是不能使用這些變數的,不過當用static宣告區域性變數時,區域性變數就有全域性生命性和區域性可見性,意思就是它佔用的儲存單元在整個程式中會一直到程式結束,但是還是隻在本函式中使用。而全域性變數則可以為本檔案中的其他函式所共用。有效範圍為從函式定義位置到本原始檔結束。
12樓:我是百人敵
區域性變數被編譯成關於堆疊指標的偏移,堆疊指標在每次呼叫後都被修改。
所以只在一次呼叫過程中起作用。
全域性變數被編譯到資料段,所以其週期為整個程序。
13樓:匿名使用者
最近包含它的大括號 超出大擴號後變數不可見。
沒被大括號擴住的為全域性。
14樓:網友
區域性變數:在函式開頭(函式內)定義,只在本函式範圍內有效。
全域性變數:在函式外定義,從定義位置開始到本原始檔結束。
15樓:塞森巴茂彥
根據使用。
範圍來區分的。
1。區域性變數。
他是指在。函式內部。
定義的變數。
作用域為。定義區域性變數的函式。
也就是說他只能在定義他的函式中使用。
最值得注意的是。
只有在程式。
執行到定義他的。
模組時才能生成,一旦執行退出該模組則起變數消失()2。
全域性變數。在程式執行的。
過程中一直有效。
x=1;func
func1main)由此不難看出整型x的。
作用範圍。對於全域性變數。
如果在定義的時候不做初始化。
則系統將自動為起賦值。
數值型為0字元型為空'\0'
全域性變數的弊端。
增加記憶體開銷。
降低函式的通用性。
定義全域性變數時。
理想的位置是在檔案的開頭。
當這些函式以及同乙個程式中的其他。
源程式檔案中的某些函式需要使用該全域性變數時在函式內部對該變數使用extern
加以說明。說明他是外部的。
這裡還要做詳細的講解)
inta=1,b=2;
intmin
x,y)intx,y;
我還要說明的是。
對外部變數的說明和對全域性變數的定義。
不是一回事。
對外部變數的說明。
只是宣告該變數是在外部定義過的乙個全域性變數在這裡引用。
而對全域性變數的定義則是要對起分配。
儲存單元。的乙個全域性變數只能定義一次。
可是卻可以多次引用。
*在同一。原始檔中,全域性變數和區域性變數同名時,在區域性變數的作用域內,全域性變數不起作用的。
c關於返回區域性變數指標的問題
16樓:網友
有返回值的話,那麼在主函式或者其他呼叫函式肯定有這樣的表示。=glist_reverse(glist_t g);
所以你的返回的是乙個指標值,然後把這個值賦值給等號左邊的那個量而自定義函式里的所有東西自動釋放掉,這跟區域性變數沒有衝突的。
樓主細想一下是不是···
17樓:網友
**裡rey指向的是函式引數g,返回引數沒有問題。
c++變數的作用域和生存週期 為什麼l5和l6的輸出結果是這樣的?
18樓:網友
因為m沒有被賦值過。是個不確定的值。
p2是個區域性指標,沒有賦值是不確定的值。所以能夠通過if判斷。
凡是全域性變數,或是static變數,即使沒有賦值。也具有0或者nullptr的初始值。
c 採用全域性變數解決呼叫函式引數問題和採用指標解決的區別
19樓:悲傷0謝幕
對於你個人開發來說,或許全域性變數更加方便,但對於團隊開發,全域性變數是不被推薦的,函式的作用是用於封裝一段功能,應該是獨立的一段功能函式,過度依賴全域性變數,一旦全域性變數被意外修改會發生不可意料的錯誤,而且當你熟練運用指標你會發現它能給你帶來許多便利,所以推薦你使用指標。
20樓:網友
你這是**比較少所以清晰,當**量大的時候你就很麻煩的~你的例:
#include
#include
int x,y;//全域性變數 ,全域性變數導致所有函式都有可能會修改x和y的值,所以你在定義其他函式的 //時候每次都要注意不要定義和全域性變數的名稱一樣,不然 可以編譯,但不是你想要的結果。
void swap(void)
int main()
21樓:聽不清啊
當乙個程式比較小時,使用的變數個數很少,這當然可行。但是當程式稍大一點時,就會發現要定義的變數太多,特別是一些迴圈控制變數、臨時變數等,不知道此前是否已經使用;賦初值會否使以前的資料丟失;一不小心把前面有用的資料覆蓋了的話,這種邏輯錯誤很難查詢。特別是很多要使用區域性變數的遞迴程式,就無法使用。
22樓:資源集合的春天
32位windows記憶體位址採用平坦結構,記憶體位址都是32位整數,而指標變數的實質就是記憶體位址。所以,不管哪一種型別的指標變數都是4個位元組大小。
c語言相關問題:函式返回區域性指標變數
23樓:政者法墨
你這程式就是錯誤的,你在試圖返回乙個區域性變數的位址,區域性變數在函式呼叫完以後就會被系統釋放它所佔的儲存空間,所以說你返回乙個不存在的變數的位址,就是不合法的!!!
24樓:網友
首先你要理解執行時執行棧的概念,執行在乙個函式中的時候,區域性變數是依次壓在棧區的,函式返回後釋放,相同的位址可能被下乙個執行的函式中的區域性變數重用。
如果註釋掉fun2,你只呼叫了fun1,區域性變數p1的值為fun1裡面j所佔的位址,內容為5,返回後p=p1, *p 為 5,如果不註釋掉fun2, fun1退出後,執行棧上繼續執行fun2.由於fun1的j和fun2的j1所在的偏移相同,它們在實際記憶體中所佔的位址也是相同的,所以p2的值,也就是fun2的j1的位址,也就是fun1的j的位址,它的內容被改為10,所以p現在等於p1等於p2等於j1的位址等於j的位址,所以內容是10
另外,你這個程式肯定是錯的,別這麼寫,考試肯定掛,上班肯定被開除。
我想問在c/c++裡面,各種形式的字串生命週期的問題。
25樓:網友
第乙個不要。
malloc和free對應。
new和delete對應。
s1有效。我也確實太久沒摸c++了,這是記憶中的。
隨便搜了個看看吧。
26樓:網友
比如 char * = "111111111" ;//這種它需要手動釋放記憶體空間麼,怎麼釋放?如果要,free還是delete?
a:不需要, 此時「11111111」作為字串常量存放在靜態儲存區,可以讀,不可以修改,系統執行結束時自動釋放。
cstring s1 ;
a:有效,這是使用s2向是s1賦值,字串存放在cstring變數內部,至於是不是二者是不是貢獻字串這個是由具體實現決定的(有時候為了節約空間會使用cow(copy on write)技術),不過可以保證的是s2釋放後,s1的值肯定在。
c語言中 區域性指標變數傳給函式引數的過程
27樓:風若遠去何人留
沒列印直接掛掉。
你的p沒有初始化 是野指標。
於是ptr的值也就是隨機值。
賦值*ptr導致野指標賦值,非法訪問,掛掉。
28樓:網友
你的fun採用 傳引用。是把這個引數的指標傳送過去,然後修改該位址下面的資料。所以這個修改就相當於全域性變數之類的。。。所以輸出理論上是11。
不過一般指標定義的時候,要給乙個初始值,或者初始位址。。。不然,開闢的位址就是個未知,你在這個未知的位址上面,進行修改他的值,很然後出現問題。
C 裡指標變數自身值的問題,關於c 中指標變數的問題
pt 1244996 是pt的地址 p 後 p p 優先順序高,因此 地址變為了 1245000 注意整形指標 1,其實就是 4,因為整形的size是4位元組 p 1245064 是地址1245000 對應的記憶體值,是不確定的 p 1244992 是p這個指標本身在記憶體中存放的位置,這個也是不確...
關於c子類繼承的this指標的問題
cout d 我想應該是初始化順序吧 首先 cb類 初始化 基類 cd,這時候還並不知道派生類的 b 所以會報錯 初始完基類以後才會初始化自己,這個時候才會有成員 b 首先你要明確一點,this指標屬於某一具體物件,cb cb定義時,this指標屬於cb,可以呼叫cb的資料和函式成員,cd cd定義...
關於C語言指標的問題如圖,求解釋
這樣 bai理解不 int sss char s,char t 終止時 1 s 指向結尾,t 沒有到結尾,返回 s t 為正數 終止時 2 s 指向結尾,t 指向結尾,返回 s t 為 0 終止時 3 s 沒有到結尾,t 指向結尾,返回 s t 為負數 return s t 因為有一個等於的符號 所...