變量分為局部與全局,局部變量又可稱之為內(nèi)部變量。由某對(duì)象或某個(gè)函數(shù)所創(chuàng)建的變量通常都是局部變量,只能被內(nèi)部引用,而無法被其它對(duì)象或函數(shù)引用。
全局變量既可以是某對(duì)象函數(shù)創(chuàng)建,也可以是在本程序任何地方創(chuàng)建。全局變量是可以被本程序所有對(duì)象或函數(shù)引用。一個(gè)局部變量在被其它對(duì)象引用時(shí),會(huì)是一個(gè)空值。但全局變量卻不會(huì)出現(xiàn)這種情況。
全局變量使用注意
全局變量的存在主要有以下一些原因:
1,使用全局變量會(huì)占用更多的內(nèi)存(因?yàn)槠渖陂L),不過在計(jì)算機(jī)配置很高的今天,這個(gè)不應(yīng)該算什么問題,除非使用的是巨大對(duì)象的全局變量,能避免就一定要避免。
2,使用全局變量程序運(yùn)行時(shí)速度更快一些(因?yàn)閮?nèi)存不需要再分配),同樣也快不了多少。
3,對(duì)于局部變量的名字空間污染,這個(gè)在不使用太多變量時(shí)是可以避免的。
4,當(dāng)全局變量與局部變量重名的時(shí)候,起作用的是局部變量,全局變量被屏蔽掉。
5,還可以用extern在函數(shù)外對(duì)全局變量聲明,使全局變量的作用域從聲明處到文件的結(jié)束。
總之,全局變量可以使用,但是全局變量使用時(shí)應(yīng)注意的是盡可能使其名字易于理解,而且不能太短,避免名字空間的污染;避免使用巨大對(duì)象的全局變量。
如下例所示聲明全局變量:
Global y As String
全局變量使用
面向?qū)ο笳Z言中的使用在現(xiàn)代的面向?qū)ο笳Z言如Java,C++,C#,Ruby中,由于變量都是封裝在類里面的,對(duì)別的類不可見,所以已經(jīng)幾乎完全拋棄了全局變量的概念。然而,可以通過把一個(gè)類定義為public static,把類成員變量也定義為public static,使該變量在內(nèi)存中占用固定、唯一的一塊空間,來實(shí)現(xiàn)全局變量的功能。
關(guān)于單片機(jī)全局變量初始化的問題
假如說在keil中定義了一個(gè)全局變量int i = 0x1234;這個(gè)i的初始化肯定是在上電之后,main函數(shù)之前。編譯完之后debug,從地址0開始執(zhí)行
;-------------------------------------------------------------------------
; STRUCTURE OF THE INITIALIZATION INFORMATION
; -------------------------------------------
; This section describes the initialization data generated by C51 for
; explicit variable initializations (in segment ?C_INITSEC)。
;
; Explicit variable initilizations at C source level are stored by C51 in
; the segment ?C_INITSEC. All partial segments are combined at linker level
; to one segment. The segment end value DB 0 is taken from this library module
; INIT.A51.
;
; Structure of the ?C_INITSEC information:
; 《Info》 (see below) [BYTE] ----+ repeated
; 《additional info》 [BYTES depend on Info] ----+ repeated
; 0x00 [BYTE] 《end of list mark》
;
; 《Info》 has the following format:
;
; Bit 7 6 5 4 3 2 1 0
; 《Info》 T T B L L L L L T=Type B=BIGBIT L=LENGTH
;
; If BIGBIT is set, another LENGTH BYTE FOLLOWS. The LENGHT
; info of the first byte is then the HIGH part.
;
; Typ is one of the following:
; 0 := IDATA init values; the following bytes follow:
; - 1 byte address
; - init data bytes according LENGTH specification
;
; 1 := XDATA init values; the following bytes follow:
; - 2 byte address (high byte first)
; - init data bytes according LENGTH specification
;
; 2 := PDATA init values; the following bytes follow:
; - 1 byte address
; - init data bytes according LENGTH specification
;
; 3, BIGBIT=0 := BIT init values; the followign bytes follow:
; - 1 byte for each bit according LENGTH specification
; this byte has the following format:
;
; Bit 7 6 5 4 3 2 1 0
; I B B B B B B B I := state of the bit
; B := bit address
;
; 3, BIGBIT=1 := HDATA init values; the following bytes follow:
; - another LENGTH byte (since BIGBIT is always 1)
; - 3 byte address (MSB first)
; - data bytes according LENGTH specification
;
;----------------------------------------------------------------------
評(píng)論
查看更多