c語言靜態變數
『壹』 關於c語言static變數
函數中定義的static存儲型變數的地址被返回後,在主調函數中通過指針操作該變數是合法的,以下代碼可以驗證:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
int*f(void){
statica=1;
return&++a;
}
intmain(void){
int*p=f();
printf("%d ",*p);
*p=7;
printf("%d ",*p);
printf("%d ",*f());
return0;
}
輸出是:
2
7
8
說明很正常。
『貳』 C語言的中靜態變數
前面的答案都是錯的,正確的答案應該為
i=10,,j=1 解釋: 首先你要明確什麼是靜態定義static你理解「靜態變數只接受第一次賦值」說明你對static還有一點認知,但是不完全正確 本題的關鍵在於
「靜態全局變數
j
的定義」
還有你對
「賦初值」的理解 由於「如果在定義局部變數時不賦初值的話,對靜態局部變數來說,編譯時自動賦初值0」因此
static
int
j;
和
static
int
j=0;是完全等價的這樣
函數f2定義中的
j=0;只是純粹的賦值,則無論是第一次循環還是第10次循環,j=0;語句都不是一個初始化的語句,這點需要明確 我想你只要弄明白這點,本題的答案是怎樣得來的你就完全清楚了,你主要是對static的理解不完整而已 附帶一提,定義和聲明函數時,如果參數類型為空可以省略即void
f1(void){......}void
f2(void){......}中的void是完全多餘的,它和void
f1(){......}void
f2(){......}完全等價
『叄』 c語言中靜態變數是怎麼用的
c語言中靜態變數作常量使用,用於存儲常數。可用const,constant或final等關鍵字標識,其值就會在編譯時設定,並且無法在運行時改變。編譯器通常將靜態常量與文本一起置於目標文件的文本區域,而非常量初始化數據則置於數據區;而如若有需要,有些編譯器還可選擇為其開辟專用區。
對於靜態全局變數來說,針對某一源文件的以static聲明的文件級變數與函數的作用域只限於文件內(只在文件內可見),也即「內部連接」,因而可以用來限定變數的作用域。
(3)c語言靜態變數擴展閱讀:
在函數內以static聲明的靜態局部變數雖然與自動局部變數的作用域相同(即作用域都只限於函數內),但存儲空間是以靜態分配而非默認的自動分配方式獲取的,因而存儲空間所在區域不同。
一般來說,靜態分配時存儲空間於編譯時在程序數據段分配,一次分配全程有效;而自動分配時存儲空間則是於調用棧上分配,只在調用時分配與釋放,且兩次調用間變數值始終保持一致;必須注意,靜態局部變數只能初始化一次,這是由編譯器來保證實現。
『肆』 C語言靜態變數的問題
靜態變數不是不能變的,而是它在內存中不釋放,你用的時候還是上次用完是的值;它能改變,賦值後就有了新的值。
『伍』 C語言中的靜態變數
用static聲明的變數是靜態變數,比如static int a =4;這個a的初始值為4(僅僅是初始值),並且這個變數是一直存在的。
幾個a並不是同一個a,我們可以把程序中的a改一下名字,方便理解。如下:
#include <stdio.h>
int fun(int n)
{
static int a =3;
int t =0;
if(n%2)
{
static int b =4;
t+=b++;
}
else
{static int c =5;
t+=c++;
}
return t+=a++;
}
main()
{
int i,s=0;
for (i=0;i<3;i++)
s+=fun(i);
printf ("%d ",s);
}開始在稿紙上分析。
『陸』 C語言靜態變數
靜態外部變數只限於本文件范圍內有效,不能被其他文件引用。靜態局部變數只能被定義變數所在的函數引用,且每次調用此函數結束時靜態局部變數值保留,作為下次調用此函數時該變數的初值。c基礎很重要,請認真研讀
『柒』 C語言裡面靜態變數static是什麼作用啊
static關鍵字在C語言中用於聲明一個靜態的局部變數。
作用:
有時希望函數中的局部變數的值在函數調用結束後不消失而繼續保留原值,即其佔用的存儲單元不釋放,在下一次再調用該函數時,該變數已有值(就是上一次函數調用結束時的值)。這時就應該指定該局部變數為「靜態局部變數」,用關鍵字static進行聲明。
用靜態存儲要多佔內存(長期佔用不釋放,而不能像動態存儲那樣一個存儲單元可以先後為多個變數使用,節約內存),而且降低了程序的可讀性,因此若非必要,不要多用靜態局部變數。
『捌』 c語言,靜態變數相關
被static定義的變數屬於靜態變數,之後即使再次定義都對其無效,所以它的值不會因為再次定義而重置值,所以再此題中就相當於就是在求1+2+3+4+5+6的和,故選B。
『玖』 C語言中靜態變數與動態變數的定義與區別
動態變數和靜態變數定義和區別如下:
1、定義上,靜態變數比動態變數多一個關鍵字static,比如:
動態變數:int i;
靜態變數:static int i;
2、動態變數在子程序中,每次調用時都會從零開始,不會保留原有數據,靜態變數調用時原有值不會發生改變,比如:
main()
{
int i;
for(i=0;i<5;i++)fun();//fun1();
}
void fun() //輸出結果為11111
{
int j;
j++;
printf("%d",j);
}
void fun1() //輸出結果為12345
{
static int j;
j++;
printf("%d",j);
}
『拾』 有關c語言函數靜態變數
靜態變數是一種生存期為整個源程序的量。雖然離開定義它的函數後不能使用,但如再次調用定義它的函數時,它又可繼續使用,
而且保存了前次被調用後留下的值。
第一個printf(
"%d\n",
func(k+=100)
);
k+=100,k就是200;
x++;
y++;
k++;
x=2,y=11,k=201;
所以第一次列印是214
第二個printf(
"%d\n",
func(k+=100)
);
k+=100,k就是300;
x++;
y++;
k++;
x=2,y=12,k=301;(y是靜態變數,原值不變)
所以第二次列印是315
第三個printf(
"%d\n",
func(k+=100)
);
k+=100,k就是400;
x++;
y++;
k++;
x=2,y=13,k=401;(y是靜態變數,原值不變)
所以第二次列印是416