當前位置:首頁 » 編程語言 » c語言局部變數在哪裡申請
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言局部變數在哪裡申請

發布時間: 2022-05-06 06:05:42

c語言中怎麼將頭節點為空(全局變數)改為局部變數

全局變數:在所有的函數外部定義的變數,它的作用域是從定義的位置直到定義該變數的文件結束。全局變數一般存儲在靜態存儲區,存儲單元固定,其值在程序運行期間一直存在。
局部變數:在函數內部定義的變數,作用域僅限於函數中從定義位置直到該函數結束。局部變數一般存儲在堆棧區,其值只會保存到定義該變數的函數運行結束,再次調用該函數時又會重新分配存儲單元並重新賦值。
同一個文件中定義的全局變數不能同名,同一個函數中定義的局部變數不能同名,而同一個文件中的全局變數和其內部函數中的局部變數可以同名,不同的函數內的局部變數可以同名,但這種同名變數不是同一個變數。

變數定義後,在其作用范圍內就不能再更改其類型。所以想在C語言中將頭節點為空(全局變數)改為局部變數是不可能實現的,只能通過在要使用該局部變數的函數中定義一個局部變數作為中間變數,把原全局變數的值賦給該局部變數,使該局部變數暫時代替原局部變數。在函數中對該局部變數的所有更改都不會影響原全局變數,除非在函數結束時把局部變數改變後的值返回給原全局變數。

Ⅱ C語言中怎樣申明變數

任何一種編程語言都離不開變數,特別是數據處理型程序,變數的使用非常頻繁,沒有變數參與程序甚至無法編制,即使編制運行後的意義也不大。變數之所以重要,是因為變數是編程語言中數據的符號標識和載體。

C語言是一種應用廣泛的善於實現控制的語言,變數在C語言中的應用更是靈活多變。那麼變數究竟是什麼呢?變數是內存或寄存器中用一個標識符命名的存儲單元,可以用來存儲一個特定類型的數據,並且數據的值在程序運行過程中可以進行修改。可見,變數首先是一個標識符或者名稱,就像一個客房的編號一樣,有了這個編號我們在交流中就可方便言表,否則,我們只可意會,那多不方便。為了方便,我們在給變數命名時,最好能符合大多數人的習慣,基本可以望名知義,便於交流和維護;其次,變數是唯一確定的對應內存若干存儲單元或者某個寄存器。這些是編譯器來保證的,用戶一般不用費心。

程序員一旦定義了變數,那麼,變數就至少可為我們提供兩個信息:一是變數的地址,即就是,操作系統為變數在內存中分配的若干內存的首地址;二是變數的值,也就是,變數在內存中所分配的那些內存單元中所存放的數據。

由於程序的多樣需要,我們對變數也有各種各樣的要求,比如:變數的生命期,變數的初始狀態,變數的有效區域,變數的開闢地和變數的開辟區域的大小等等;為了滿足這些要求,C語言的發明者就設置了以下變數:

1、 不同數據類型的變數;如:char cHar, int iTimes, flaot faverage;

2、 全局變數或者叫全程變數;

3、 局部變數;

4、 靜態變數: 靜態全局變數和靜態局部變數;關鍵詞:static

5、 寄存器變數;關鍵詞:register;

6、 外部變數: 關鍵詞:extern;

C語言中,變數在內存中開闢地的大小由數據類型決定的,由於PC機中規定一個地址單元存一個位元組,不同的數據類型的變數,為其分配的地址單元數是不一樣的。C語言中除幾種基本的數據類型外用戶還可以自己定義所需要的數據類型:

1、 bool型 sizeof(bool): 1

2、 char型: sizeof(char): 1

3、 short型: sizeof(short): 2

4、 int型: sizeof(int): 4

5、 long型: sizeof(long): 4

6、 float型: sizeof(float): 4

7、 double型: sizeof(double): 8

8、 自定義型:如:

typedef struct tagMyData

{

char cHar;

int iTimes;

float faverage;

}MyDatap;

sizeof(MyDatap): 12

char szBuf[]="HELLO C&C++!";

sizeof(szBuf): 13

局部變數和全局變數是相對而言的;如下:局部變數 int itmp;

int Get_Max( const int& x, const int& y, const int& z )

{

int itmp;

if(x > y) itmp = x;

else itmp = y;

if( itmp > z ) return itmp;

else return z;

}

在函數內部說明的變數為局部變數,只有在函數執行時,局部變數才存在,當函數執行完退出後,局部變數隨之消失。也就是,當函數執行完退出後,原先在函數內定義的變數現在不能用,這通常由編譯器保證,它會阻止編譯通過。也就是說,原來為那個局部變數分配的內存,現在已經不屬於它,它再無權訪問了。如要再使用這些內存單元就必須從新定義變數來申請,只有分配給的變數才可訪問它。否則,就會出錯,如數組越界訪問。

與局部變數不同,全局變數在整個程序都是可見的,可在整個程序運行過程中,對於任何一個程序都是可用的。全局變數的說明的位置在所有函數之外,但可被任何一個函數使用,讀取或者寫入。如下:全局變數 int iCount, bool bForward;

int iCount; //全局變數;

bool bForward; //全局變數;

void add( void );

void dec( void );

void man(void )

{

while( iCount < 1000 && iCount > -1000)

{

add( );

dec( );

printf("COUNT:%d;\n", iCount)

}

}

void add( void )

{

if( bForward ) iCount++;

}

void dec( void )

{

if(!bForward ) iCount--;

}

可見,全局變數非常方便不同函數間數據共享,同樣,任何函數在在使用數據時,都不敢保證數據是否已被修改。如果程序員無法保證這個,就盡量避免使用全局變數。

靜態變數是分配在存儲器中C程序所佔據的數據段內, C程序運行的整個過程中一直保留,不會被別的變數佔用。靜態變數可以定義成全局變數或局部變數,當定義為全局變數時,在它定義的程序的整個運行期間均存在並且保持原來的存儲單元位置不會改變。那麼既然有了全局變數為什麼還要定義全局靜態變數呢?看下邊的示例:

Ⅲ C語言中 局部變數和全局變數都是存儲在什麼區

C語言中局部變數存在棧里,全局變數存靜態存儲區。

局部變數在棧空間上分配,這個局部變數所在的函數被多次調用時,每次調用這個局部變數在棧上的位置都不一定相同。局部變數也可以在堆上動態分配,但是記得使用完這個堆空間後要釋放之。

全局變數全部存放在靜態存儲區,在程序開始執行時給全局變數分配存儲區,程序行完畢就釋放。在程序執行過程中它們占據固定的存儲單元,而不動態地進行分配和釋放;

(3)c語言局部變數在哪裡申請擴展閱讀

C語言中局部變數和全局變數示例:

#include<stdio.h>

#include<malloc.h>

staticints1=0,s2=0,s3=0;//靜態變數放在靜態區

intg1=0,g2=0,g3=0;//全局變數放在靜態區

voidmain()

{

staticints4=0,s5=0,s6=0;<spanstyle="font-family:Arial,Helvetica,simsun,u5b8bu4f53;"></span>//靜態變數

inta1=0,a2=0,a3=0;<spanstyle="font-family:Arial,Helvetica,simsun,u5b8bu4f53;"></span>//局部變數放在棧區

charc1[]="aabb";//局部變數放在棧區

char*c2="aabb";//字元常量放在靜態區

char*m1=(char*)malloc(1);//堆區

char*m2=(char*)malloc(1);//堆區

char*m3=(char*)malloc(1);//堆區

printf("動態數據區 ");

printf("a1 a2 a3 ",&a1,&a2,&a3);

printf("c1 ",c1);

printf("m1 m2 m3 ",&m1,&m2,&m3);

printf("靜態數據區 ");

printf("s1 s2 s3 ",&s1,&s2,&s3);

printf("g1 g2 g3 ",&g1,&g2,&g3);

printf("s4 s5 s6 ",&s4,&s5,&s6);

printf("c2 ",c2);

}

Ⅳ C語言中的 局部變數,存儲在什麼地方

C語言中的局部變數存儲在棧里。

普通的局部變數在棧空間上分配,這個局部變數所在的函數被多次調用時,每次調用這個局部變數在棧上的位置都不一定相同。局部變數也可以在堆上動態分配(malloc),但是記得使用完這個堆空間後要釋放之。

在棧空間上分配時是要注意內存的,不能分配內存過大。如果棧內空間小於所申請的空間大小,那麼這時系統將揭示棧溢出,並給出相應的異常信息。但是堆不一樣,堆可分配空間是很大的。

(4)c語言局部變數在哪裡申請擴展閱讀

局部變數分類

1、位置:靜態局部變數被編譯器放在全局存儲區.data,所以它雖然是局部的,但是在程序的整個生命周期中存在(定義時出生,隨著程序結束而結束)。

2、訪問許可權:靜態局部變數只能被其作用域內的變數或函數訪問。也就是說雖然它會在程序的整個生命周期中存在,由於它是static的,它不能被其他的函數和源文件訪問。

3、值:靜態局部變數如果沒有被用戶初始化,則會被編譯器自動賦值為0,以後每次調用靜態局部變數的時候都用上次調用後的值。

Ⅳ C語言局部變數

return t+a++; 這里 ++ 運算符優先順序比+ 高, 所以 語句可寫成:
return (t+(a++)); 在表達式中,後綴a++, 用原值,所以返回的值是 t+a, 然後 static int a , 自增 1,並保留 (static 變數生命周期同整個程序)。
為描述這一過程,可以把 return t+a++; 改寫成: a++; return t+a-1;
程序里有4個不同域的a, 為便於區分,可改寫為 全局量a0, static量 a, n為奇數時 a2, n為偶數時a3。
#include <stdio.h>
int a0=4;
int f(int n){
int t=0;
static int a=5;
if (n%2){int a2=6; t+=a2++;}
else { int a3=7; t+=a3++; }
//return t+a++;
a++; return t+a-1;
}
int main( )
{
int s=a0,i=0;
for (;i<2;i++) s+= f(i);
printf("%d\n",s);
return 0;
}
得28

Ⅵ C語言中非Static局部變數在什麼中生成

局部變數,一般都是在函數體當中的定義,當程序執行到這個函數體的時候,也就是進入到這個函數體的作用域范圍,win32操作系統對於局部變數是使用時候才申請空間,程序退出局部變數的作用域范圍以後,這個局部變數就失去意義,對於這樣的局部變數,系統都是在棧中給予分配空間的,
所以:而非Static局部變
量在__________________________中生成? as:棧

Ⅶ C語言中的全局變數和局部變數

局部變數是在某一函數內定義的變數,有效區域在本函數里。
全局變數定義在函數外,全局起作用。

Ⅷ C語言中的「局部變數」是什麼意思

局部變數是指在程序中,只在特定過程或函數中可以訪問的變數,是相對於全局變數而言的。
在C語言中,局部變數可以和全局變數重名,但是局部變數會屏蔽全局變數。
#include

int fun(int a)
{
int temp; // 變數temp就是定義的一個局部變數,在fun函數執行完後,其在內存中佔用的內存區就會釋放回收
temp = 2*a;
return temp;
}
int b; // 變數b就是一個全局變數,當程序執行完後,才釋放其佔用的內存
void main()
{
int a=2; // 變數a也是局部變數
b = fun();
}

Ⅸ c語言程序,局部變數

{}裡面的變數從上往下看,從哪裡定義就從哪裡開始一直有效到}。
int a=10,b=20,c=30;
{
int a=4;//在上面這個{號和對應的}中,a都是指的這里這個a,而不是上面int a=10的那個
c=a+b;// 這里的C屬於main裡面的。c=a+b=4+20=24
printf("%d\n",a+b+c);//4+20+24=48
{
int c=b;//c=b=20;
fun(&a,b,&c); //進入fun *a=++b=21,b=*c=20; *c=*a=21;
printf("%d\n",a+b+c);//a+b+c=21+20+21=62
}
printf("%d\n",a+b+c);//這里的變數我們看看,a屬於{}中的a=21,b=20;c=24//c是mian中的那個c,最里層的{}不是有一句int c=b 這個c的有效范圍到}就OVer了
所以 a+b+c=21+20+24=65

鑒定完畢!
}

Ⅹ C語言里的局部變數到底在哪設比較好

C語言里的局部變數到底在哪設比較好

一般原則是盡量少定義全局變數,因為全局變數會佔用更多的內存,而且存在時間長;當然定義也沒有問題,能解決這樣的問題……但是我提議你:定義在主函數中,然後用指針型的參數傳到兩個函數進行調用。