C++變量存儲(chǔ)的生命周期與作用域?qū)嵗a精講
auto類型:非靜態(tài)的局部變量存儲(chǔ)類型都是auto,這些數(shù)據(jù)存儲(chǔ)在棧區(qū),不初始化變量的值時(shí)隨機(jī)的。C++中的auto還可以自動(dòng)推導(dǎo)類型。生命周期:塊內(nèi) 作用域:塊內(nèi)
程序:
#include <stdio.h>
void test(void);
int main() {
// auto存儲(chǔ)類型
auto b = 13; // C++新功能,auto自動(dòng)推導(dǎo)類型
int a = 12; // auto存儲(chǔ)類型的局部變量,存儲(chǔ)在函數(shù)棧幀中
{
int c = 11;
printf("%d\n",a);
printf("%d\n",c);
}
test();
printf("%d\n",a);
return 0;
}
void test(void) {
int d = 13; // auto存儲(chǔ)類型的局部變量,存儲(chǔ)在函數(shù)棧幀中
printf("%d\n",d);
}static類型:static靜態(tài)存儲(chǔ)類型的變量,可以作為局部變量和全局變量。作為全局變量的時(shí)候不能被外部文件所訪問(wèn),靜態(tài)變量只初始化一次,存儲(chǔ)在靜態(tài)區(qū)中。也可以用來(lái)修飾函數(shù),這樣外部文件無(wú)法調(diào)用該函數(shù)。生命周期:整個(gè)程序 作用域:全局靜態(tài)文件內(nèi)、局部塊內(nèi)
程序:局部靜態(tài)變量
#include <stdio.h>
#include <windows.h>
void test(void);
int main() {
test();
test();
// printf("%d", a); static作為局部變量,外面是訪問(wèn)不了的
system("pause");
return 0;
}
// 局部靜態(tài)變量,存儲(chǔ)在靜態(tài)區(qū)中
void test(void) {
static int a = 11; // 只會(huì)被初始化一次
a++;
printf("%d\n", a);
}程序:全局靜態(tài)變量
#include <stdio.h>
#include <windows.h>
void test(void);
static int b = 33; // 全局靜態(tài)變量,外部文件無(wú)法訪問(wèn),存儲(chǔ)在靜態(tài)區(qū)中
int main() {
test();
printf("%d\n", b);
system("pause");
return 0;
}
void test(void) {
printf("%d\n", b);
}register類型:寄存器變量,存儲(chǔ)在cpu中不在內(nèi)存中,所以沒(méi)有地址??梢约涌煊?jì)算機(jī)訪問(wèn)。但是在C++中如果一定要去訪問(wèn)寄存器變量那么寄存器變量會(huì)被降級(jí)成普通變量。寄存器變量不能作為全局變量
程序:
#include <stdio.h>
// register int b = 12; 寄存器變量沒(méi)法作為全局變量
int main() {
// register變量沒(méi)有地址
register int a = 12;
printf("%d",a);
printf("%p", &a); // 強(qiáng)制訪問(wèn)register變量,那么這個(gè)變量會(huì)變?yōu)閍uto類型
for(register int i=0; i<1000; i++){ // 加快運(yùn)行速度寫法,但是沒(méi)必要
}
return 0;
}extern類型:可以訪問(wèn)外部文件中的全局變量,只要在本文件中的變量前加上extern表示他是個(gè)外部變量。
程序:
extern.h
#ifndef _EXTER_H_ #define _EXTER_H_ #include <stdio.h> void test1(); #endif
extern_test.cpp
#include "exter.h"
int c = 44;
int d = 55; // 這里不要寫extern int d;這是錯(cuò)誤的 ,也不要寫成extern int d=55這個(gè)是對(duì)的但是不推薦
void test1() {
printf("extern_test_c_addr:%p\n", &c);
printf("extern_test_d_addr:%p\n", &d);
}man.cpp
#include <stdio.h>
#include <windows.h>
#include "exter.h"
void test(void);
extern int d; // extern拿到其他文件變量并作為本文件的全局變量
int main() {
// extern拿到其他文件變量并作為本文件的局部變量
extern int c;
printf("c=%d\n",c);
c = 12;
printf("c=%d\n",c);
printf("d=%d\n",c);
test();
test1();
printf("extern_test_c_addr:%p\n", &c);
printf("main_d_addr:%p\n", &d);
system("pause");
return 0;
}
void test(void) {
printf("test d=%d\n",d);
//printf("c=%d\n", c); 局部變量訪問(wèn)不了
}到此這篇關(guān)于C++變量存儲(chǔ)的生命周期與作用域?qū)嵗a精講的文章就介紹到這了,更多相關(guān)C++生命周期與作用域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++鏈表實(shí)現(xiàn)通訊錄管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++鏈表實(shí)現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
深入探討C++ OpenCV如何實(shí)現(xiàn)圖像矯正
這篇文章主要為大家詳細(xì)介紹了C++ OpenCV如何實(shí)現(xiàn)簡(jiǎn)單的圖像矯正功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
C語(yǔ)言報(bào)錯(cuò):Format String Vulnerability的多種解決方案
Format String Vulnerability(格式化字符串漏洞)是C語(yǔ)言中常見(jiàn)且嚴(yán)重的安全漏洞之一,它通常在程序使用不受信任的輸入作為格式化字符串時(shí)發(fā)生,本文將詳細(xì)介紹Format String Vulnerability的產(chǎn)生原因,提供多種解決方案,需要的朋友可以參考下2024-06-06
C++中與輸入相關(guān)的istream類成員函數(shù)簡(jiǎn)介
這篇文章主要介紹了C++中與輸入相關(guān)的istream類成員函數(shù)簡(jiǎn)介,包括eof函數(shù)和peek函數(shù)以及putback函數(shù)還有ignore函數(shù),需要的朋友可以參考下2015-09-09
C語(yǔ)言超詳細(xì)講解猜數(shù)字游戲的實(shí)現(xiàn)
現(xiàn)在很多游戲都有抽獎(jiǎng)抽卡的功能,其實(shí)這個(gè)就類似于猜數(shù)字,生成一個(gè)隨機(jī)數(shù),然后你去猜,猜對(duì)了就得獎(jiǎng)。猜到一定次數(shù)就會(huì)保底。要實(shí)現(xiàn)猜數(shù)字的小游戲,首先是要讓程序生成隨機(jī)數(shù),這就要用到rand、srand和time這三個(gè)函數(shù),其次要了解時(shí)間戳2022-07-07
C語(yǔ)言結(jié)構(gòu)體鏈表和指針實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要介紹了C語(yǔ)言結(jié)構(gòu)體鏈表和指針實(shí)現(xiàn)學(xué)生管理系統(tǒng),包括學(xué)生檔案管理子系統(tǒng)和學(xué)生成績(jī)管理子系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06

