⑴ 關於c語言auto變數和static變數區別
一、主體不同
1、auto變數:是一個C/C++語言存儲類型,僅在語句塊內部使用。
2、static變數:在計算機編程領域指在程序執行前系統就為之靜態分配存儲空間的一類變數。
二、作用域范圍不同
1、auto變數:初始化可為任何錶達式,其特點是當執行流程進入該語句塊的時候初始化可為任何錶達式。
2、static變數:針對某一源文件的以static聲明的文件級變數與函數的作用域只限於文件內(只在文件內可見),也即「內部連接」,因而可以用來限定變數的作用域。
三、特點不同
1、auto變數:具有自動存儲期的變數在進入聲明該變數的程序塊時被建立,它在該程序塊活動時存在,退出該程序塊時撤銷。
2、static變數:在函數內以static聲明的變數雖然與自動局部變數的作用域相同,但存儲空間是以靜態分配而非默認的自動分配方式獲取的,因而存儲空間所在區域不同。
⑵ c語言變數儲存類型
auto 是自動變數是動態地分配存儲空間的,數據在動態存儲區,函數執行完後自動釋放
實際上 auto 可以省略的,auto不寫則隱含自動變數
auto Int b,c=int b,c
static是靜態變數 即在函數調用後不消失而保留原值,其佔用內存不釋放,其值就是上次調用後的結果。
#include<stdio.h>
int fac(int n);
void main()
{ int i;
for(i=0;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
int fac(int n)
{static int f=1;
f=f*n;
return(f);
}
結果為1!=1
2!=2
3!=6
4!=24
5!=120
要輸5次
還有register變數 和extern 變數申明
⑶ C語言中的自動變數和寄存器變數是什莫
一、auto
auto稱為自動變數。
局部變數是指在函數內部說明的變數(有時也稱為自動變數)。用關鍵字auto進
行說明, 當auto省略時, 所有的非全程變數都被認為是局部變數, 所以auto實際上
從來不用。
局部變數在函數調用時自動產生, 但不會自動初始化, 隨函數調用的結束, 這
個變數也就自動消失了, 下次調用此函數時再自動產生, 還要再賦值, 退出時又自
動消失。
二、register
register稱為寄存器變數。它只能用於整型和字元型變數。定義符register說
明的變數被Turbo C2.0存儲在CPU的寄存器中, 而不是象普通的變數那樣存儲在內
存中, 這樣可以提高運算速度。但是Turbo C2.0隻允許同時定義兩個寄存器變數,
一旦超過兩個, 編譯程序會自動地將超過限制數目的寄存器變數當作非寄存器變數
來處理。因此, 寄存器變數常用在同一變數名頻繁出現的地方。
另外, 寄存器變數只適用於局部變數和函數的形式參數, 它屬於auto型變數,
因此, 不能用作全程變數。定義一個整型寄存器變數可寫成:
register int a;
⑷ C語言所有變數都默認為auto,全局變數不能為auto,那全局變數默認為什麼
1、首先在C語言軟體中,auto變數可以存儲整數類型,如下圖所示。
⑸ c語言auto定義變數
{
auto int num=1;
printf("The internal block num equal %d\n",num);
num++;
}
這裡面的num是個局部變數阿, 這里所有的num
看成是另一個變數就OK 拉。。。。只在此函數中有效 每次調用函數 重新分配空間
⑹ C語言中的關鍵字:auto是什麼意思怎麼用
1auto
這個關鍵字用於聲明變數的生存期為自動,即將不在任何類、結構、枚舉、聯合和函數中定義的變數視為全局變數,而在函數中定義的變數視為局部變數。這個關鍵字不怎麼多寫,因為所有的變數默認就是auto
⑺ c語言中變數儲存auto和static是怎麼用
局部變數按照存儲形式可分為auto, static。
與auto類型(普通)局部變數相比, static局部變數有三點不同:
1. 存儲空間分配不同
auto類型分配在棧上, 屬於動態存儲類別, 占動態存儲區空間, 函數調用結束後自動釋放, 而static分配在靜態存儲區, 在程序整個運行期間都不釋放. 兩者之間的作用域(有效范圍)相同, 但生存期不同.
2. static局部變數在所處模塊在初次運行時進行初始化工作, 且只操作一次。
3. 對於局部靜態變數, 如果不賦初值, 編譯期會自動賦初值0或空字元, 而auto類型的初值是不確定的.
特點: static局部變數的」記憶性」與生存期的」全局性」
所謂」記憶性」是指在兩次函數調用時, 在第二次調用進入時, 能保持第一次調用退出時的值.
注意事項:
1. 「記憶性」, 程序運行很重要的一點就是可重復性, 而static變數的」記憶性」破壞了這種可重復性, 造成不同時刻至運行的結果可能不同.
2. 「生存期」全局性和唯一性. 普通的local變數的存儲空間分配在stack上, 因此每次調用函數時, 分配的空間都可能不一樣, 而static具有全局唯一性的特點, 每次調用時, 都指向同一塊內存, 這就造成一個很重要的問題 ---- 不可重入性!!!
⑻ c語言中auto什麼意思
僅在語句塊內部使用,初始化可為任何錶達式,其特點是當執行流程進入該語句塊的時候初始化可為任何錶達式。
C語言中提供了存儲說明符auto、register、extern、static說明的四種存儲類別。四種存儲類別說明符有兩種存儲期:自動存儲期和靜態存儲期。
其中auto和register對應自動存儲期。具有自動存儲期的變數在進入聲明該變數的程序塊時被建立,它在該程序塊活動時存在,退出該程序塊時撤銷。
在函數內部定義的變數成為局部變數。在某些C語言教材中,局部變數稱為自動變數,這就與使用可選關鍵字auto定義局部變數這一作法保持一致。
(8)c語言的auto型變數是存儲在哪裡擴展閱讀:
C語言
auto被解釋為一個自動存儲變數的關鍵字,也就是申明一塊臨時的變數內存。
例如:
1 autodoublea=3.7;表示a為一個自動存儲的臨時變數。
C++語言
C++ 98標准/C++03標准
同C語言的意思完全一樣:auto被解釋為一個自動存儲變數的關鍵字,也就是申明一塊臨時的變數內存。
C++ 11標准
在C++11標準的語法中,auto被定義為自動推斷變數的類型。例如:
auto x=5.2;//這里的x被auto推斷為double類型
map<int,int>m;
for(auto it=m.begin();//這里it被auto推斷為map<int,int>::iterator類型
it!=m.end();++it)
{
//....
}不過C++11的auto關鍵字時有一個限定條件,那就是必須給申明的變數賦予一個初始值,否則編譯器在編譯階段將會報錯。
參考資料:網路-auto
⑼ c語言中函數默認存儲類型是什麼
c語言中的存儲類型有static 、auto、extern、及register,函數默認的存儲類型應該是extern,意思是具有外部鏈接性的。一般來說,會通過extern來聲明函數。比如下面的代碼,在1.c中定義一個函數,函數的聲明寫在1.h頭文件中,在2.c中通過添加1.h的頭文件,來聲明及調用函數f()。
//1.c
voidf(){;}
//1.h
externvoidf();
//2.c
#include"1.h"
intmain(){f();}
⑽ c語言auto與c ++ auto的區別
在c語言中auto表示變數在內存的棧區中,程序運行結束會自動被釋放.
在聲明變數時不需要特意加auto,默認就是auto變數.
c++11之前跟c語言的auto一樣,11之後auto就變為了自動判斷變數類型.
根據等號右側運算結果來判斷左側變數類型.
比如:
aout a=32.14+3.14; //這時a的類型就是double
auto a=30+3; //這時a的類型就是int