C语言变量生存期和作用域很简单:除了生死,哪一桩不是闲事?

有道是这世间事,除了生死,哪一桩不是闲事?

变量死生事大,对于编程开发者样样都思量计划周翔,唯独对于变量生死之大事,反而置若罔闻,等到挑灯奋力苦战,欲拯程序于一命呼呼之间,方捶胸顿足,一失足成千古恨。

人有了肉体就有了生命,变量分配了内存单元就有了存活,就有了寿夭长短的问题。它活着的时候就是有了内存空间的时候。当然如果你让这个变量占着茅坑不拉屎,就像皇帝永远不去翻某个妃子的牌,那你绝对是个诗人,能写出“有的人活着早就死了”的诗人。人死则灰飞烟灭,变量被回收了内存,那也就香消玉损,你也别想着有借尸还魂可能。从分配内存空间到回收空间就是变量的生存期。

人分三教九流,出入有别。有的人通天入地,有的人寸步难行。在程序的世界里分有三界:不在任何函数内的extern叫天界,为什么呢,因为生于此天的变量有着金刚不坏之身,有着跳出三界外不在五行中的本领,可以不受访问通行限制我们叫全局变量,无何时何地我们都可以访问他。另一个则是在函数内的我们叫地界,在这里的变量招之即来,挥手则去,随着函数的调用死死生生轮回不休我们叫局部变量,每调一次函数变量就跟着来,完了则深藏功与名,坐脱立亡,潇洒走一回。还有一些局部变量更加局部的,来得更匆匆,他们投胎到了复合语句里面我们叫众生界,生命在呼吸之间,出了复合语句的门它也就驾鹤西归。另人钦佩的就是有着通天本领在函数地界里手握免死牌static变量,只因他本是天界物却被打入地界,所以有着不死之身,哪怕是函数已经轮回千百劫,他却自在逍遥,事来心应事去心止,不随函数生灭,令人遗憾的是离开了函数你看不到他的存在。

生于天界的全局变量寿命是跟程序的寿命一样的,他从程序运行那一刻起一直随着程序到天荒地老,正所谓与天同寿。无论是在哪你都看到他的存在,也可访问他。而那些局部变量只能活在复合语句与函数之内,复合语句函数调用完了,分配给他的内存空间也就被充公释放重复利用,所以也就死了,再来一次,又得重新分配内存,名虽不变身已不同,你不可能读得他前世的记忆,当然static变量可是神识不灭,你可以读取他上次来的记忆。

同在天界的全局变量名是不可重名的,都要独一无二,为什么不行呢,想想变量名相当于内存地址,怎么能有同一身体的两个人不同呢?地界里的变量名跟天界的重名是没有问题的,因为地界的变量是生在不同的地方进入函数他才存在,离开了就没有了,虽然与全局变量名相同但是他的内存地址是不同的,你会不会问那在函数里访问与全局变量同名的局部变量,我访问的是哪一个呢?当然是属于你自己的那个局部变量了,你没得选择编译器帮你选了。不同函数的变量名也是可以重名的,包过static,原因只有一个所属的函数主人不同,内存地址不同。

变量生存期与作用域与他的出生地息息相关,生在大的地方,作用域也就广,反之同理,

总之记住变量生于何地用于何地。

附变量生存期和作用域分界图

C语言变量生存期和作用域很简单:除了生死,哪一桩不是闲事?

图中每个变量离开自己的范围便无法访问


分享到:


相關文章: