1. 程式人生 > >C++中auto,static,register,extern四種變數簡單理解

C++中auto,static,register,extern四種變數簡單理解

靜態儲存變數:一般是在定義時就分配了固定的儲存空間並一直保持不變,直到整個程式結束為止.

動態儲存變數:一般是在程式執行過程中使用到該變數時才會為該變數進行儲存空間的分配操作,在呼叫函式完畢之後,此類變數的儲存空間將會立即進行釋放.

auto變數:

#include<iostream>
#include<stdlib.h>
using namespace std;
//auto型別的變數是C++當中預設的儲存型別變數,一般情況未加儲存型別說明的變數均為auto型別的變數 
//2:自動變數(auto)屬於動態儲存方式,分配在棧記憶體當中 
int main()
{
	auto int x,s;
	int y;//預設儲存型別為auto
	cout<<"please input two number:"<<endl; 
	cin>>x>>y;
	s=x+y;
	if(x!=0&&y!=0)
	{
		auto int s;//此處的s和if語句外邊的s不是同一個s,當前s為一個區域性變數 
		s=x-y;
		cout<<"x-y="<<s<<endl;
	} 
	cout<<"x+y="<<s<<endl;
 } 
static變數:

1:static可以將變數宣告為靜態變數,靜態變數在定義時開闢空間,在程式結束時釋放空間,在整個程式執行期間都不進行資源的釋放

#include<iostream>
using namespace std;
int add(int x)
{
	static int n=0;//將變數n定義為static靜態變數時,該記憶體當中的值只有在程式完全執行完畢時才會進行釋放,在整個程式的執行期間一直對變數進行儲存 
	n=n+x;
	return n;
}
int main()
{
	int i,j,sum;
	cout<<"input the number:"<<endl;
	cin>>i;
	cout<<"the result is:"<<endl;
	for(j=1;j<=i;j++)
	{
		sum=add(j);
		cout<<j<<":"<<sum<<endl;
	}
}
//n在整個程式的執行過程中:n被static修飾過所以每一次執行的結果都會被儲存 
//n=0+1
//n=1+2
//n=3+3 
//當n去掉修飾符static時,將變為auto型別時,只有在add方法被呼叫時才開闢空間,在呼叫完該方法時將會對開闢的空間進行釋放
//n=0+1
//n=0+2
//n=0+3 
register變數:

當一個變數被register進行修飾之後,則改變將被存放到CPU的暫存器當中,使得CPU直接到暫存器當中進行變數的訪問即可而不需要進行主存的訪問,可以提高程式執行的

效率,被register修飾的變數一般為在程式當中被頻繁性的進行訪問的一些變數

相關推薦

C++auto,static,register,extern變數簡單理解

靜態儲存變數:一般是在定義時就分配了固定的儲存空間並一直保持不變,直到整個程式結束為止. 動態儲存變數:一般是在程式執行過程中使用到該變數時才會為該變數進行儲存空間的分配操作,在呼叫函式完畢之後,此類變數的儲存空間將會立即進行釋放. auto變數: #include<

C語言-變數的儲存類別(auto, static, register, extern

任何一個變數和函式都有兩個屬性,1、資料型別(我們已經熟知) 2、資料的儲存類別 有2種儲存方式,有4種儲存類別 auto自動變數 一般來說auto可以省略,1、函式的形參 2、在函式中定義的區域性變數(包括在複合語句中定義的區域性變數)都是自動變數auto。上述2種自動變

C/C++inline/static inline/extern inline的區別及使用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C# GUID生成格式的格式

  var uuid = Guid.NewGuid().ToString(); // 9af7f46a-ea52-4aa3-b8c3-9fd484c2af12   var uuidN = Guid.NewGuid().ToString("N"); // e0a953c3ee6040e

C/C++退出執行緒的解決方法

退出執行緒可以有四種方法: 1.執行緒函式的return返回(最好這樣):其中用執行緒函式的return返回, 而終止執行緒是最安全的, 線上程函式return返回後, 會清理函式內申請的類物件, 即呼叫這些物件的解構函式. 然後會自動呼叫 _endthreadex()函式

c++staticextern

看到一個大神寫的非常簡單明瞭的回答,特地轉載過來 連結:https://www.zhihu.com/question/265415085/answer/293495989 //是說這個變數是存在,但是不在(可能)當前的編譯單元,後續連結時會在哪裡發現 //大家共用這個全域性

C/C++autostaticregisterextern關鍵字區別小結

1. 說明   以上四種都是變數儲存說明符,因為C/C++語言在變數定義時候的完整語法是:      [儲存說明符] [資料型別] [變數名稱] [=初始化];   因為大多我們宣告的變數都

C語言關鍵字staticexternauto的作用總結

1、首先說一下auto自動儲存型別,一般我們很少在程式中顯示申明變數為auto型別。因為程式碼塊中的變數預設情況下就是這種型別,這種型別的變數存放於堆疊中,也就是說只有程式執行這些程式碼塊(一對{}之間的語句)時這種自動變數才會被建立,程式碼塊執行結束後自動變數便被釋放。

C語言autoregisterstaticextern關鍵字

1.auto #include<stdio.h> #include<stdlib.h> #include<string.h> int a = 0; void s

C語言返回字串函式的實現方法

其實就是要返回一個有效的指標,尾部變數退出後就無效了。 使用分配的記憶體,地址是有效 char   *fun() {         char*   s   =   (char*)calloc(100,   sizeof(char*)   );         if   (s)                

C++ 作業系統程序執行緒同步的方式

執行緒同步的定義:       同步就是協同步調,按預定的先後次序進行執行。如:你說完,我再說。“同”字從字面上容易理解為一起動作其實不是,“同”字應是指協同、協助、互相配合。如程序、執行緒同步,可理

C++static關鍵字的總結(轉)

blank protected .com 如果 發現 內部實現 屬於 out 服務  C++的static有兩種用法:面向過程程序設計中的static和面向對象程序設計中的static。前者應用於普通變量和函數,不涉及類;後者主要說明static在類中的作用。 1.面向過程

C#Dictionary泛型集合7常見的用法

程序集 c# border adding 設置 type 其它 else ring 要使用Dictionary集合,需要導入C#泛型命名空間 System.Collections.Generic(程序集:mscorlib) Dictionary的描述1、從一組鍵(Key

C++static關鍵字

不能 get () turn out nbsp 所有 說明 靜態 類中的成員可分為普通成員和靜態成員,函數可分為普通函數和靜態函數。普通成員只能是每個對象獨自擁有,而靜態成員則是類的所有對象所共有的。靜態成員函數中,只能調用靜態成員變量,不能調用普通成員變量。 例如:

C++關鍵字static的作用

對象 想要 關鍵字 局部作用域 blog 個數 初始化 ext lte 1、定義局部靜態變量,存放在全局數據區的靜態變量區。初始化的時候自動初始化為0; 其作用域為局部作用域,當定義它的函數或語句塊結束時,其作用域隨之結束。 2、static定義全局變量的時候,這個全局變量

【總結】C++與C#static靜態修飾符

this sea const 數據 一切都 UC 限制 有一個 字段 重點 靜態類(sealed+abstract) 靜態構造函數(無參,無限制符,自動執行一次) 靜態變量(類級別,實例無關,靜態存儲區中) 靜態方法(不能被重寫) 靜態局部變量(始終存在) 靜態本質是實

C#實現並發的幾方法的性能測試

返回 也不會 thead syn image 9.png 結果 次數 存在 原文地址:https://www.cnblogs.com/durow/p/4837746.html 0x00 起因 去年寫的一個程序因為需要在局域網發送消息支持一些命令和簡單數據的傳輸,所以寫了

去除List集合的重複值(好用的方法)(基本資料型別可用)

最近專案中需要對list集合中的重複值進行處理,大部分是採用兩種方法,一種是用遍歷list集合判斷後賦給另一個list集合,一種是用賦給set集合再返回給list集合。  但是賦給set集合後,由於set集合是無序的,原先的順序就打亂了。所以我又想著能不能用set的特性進行去重又不打亂順序

【轉】c++static關鍵字總結

個人總結: static會隱藏全域性變數和全域性函式可見範圍,使其盡在定義檔案中可見; static會改變區域性變數生存週期,在程式中一直存在,而不僅僅在區域性變數定義的函式中; static會改變類的成員變數的生存週期,在程式中一直存在; static會修改函式的使用方

一.背景 先說下windbg使用場景.各位coder在工作或多或少都會遇到下面情況 1.原生代碼好好的,放伺服器上執行一段時間後,IIS服務突然佔用 w3wp.exe CPU突然100% ,

一.背景 先說下windbg使用場景.各位coder在工作中或多或少都會遇到下面四種情況 1.原生代碼好好的,放伺服器上執行一段時間後,IIS服務突然佔用 w3wp.exe CPU突然100% ,不得不回收應用程式池,如果哪次回收晚了,被客戶發現,後果很痛苦~ 2.你的w3wp.