c訪問靜態變數
A. 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(){......}完全等價
B. C語言中靜態局部變數的問題
靜態局部變數相當於全局變數(只是只有在這個函數中能訪問,但是生命周期是和全局變數差不多的),函數退出之後變數還在,而且只在第一次進入的時候做初始化,以後會跳過初始化語句,保留原來的值(也就是說,如果item是static的,那麼只有在第一次進入這個函數的時候會執行item=0,以後都不會執行。)。
C. 關於 C語言 static變數訪問的問題
static限制了此變數在其他文件中的作用,只在本文件裡面使用,如果在函數里定義,則只能在函數裡面使用。在main所在的文件中,main函數調用的是r()指針函數,但是a是r()調用的,也就是r()在a所定義的文件裡面掉用a而已。也就是從頭到尾,也只有r()這個指針函數調用了a,並不是main調用a的。
D. C++類中靜態對象成員的訪問!
類其實是個模型。
而對象就是找個這個模型製作的實體。
比如,類是造車的圖紙,對象就是找個圖紙造出的汽車。
類的成員是分級別的:protect,public,private。
在類內部定義的函數可以訪問任何一個變數,或者調用任何的類內部的函數,但是,如果被定義成private的話,對象是不能調用的,也就是對象只能調用定義為public的數據,如果你確實需要調用某個private的變數,你可以定義一個public的函數來返回這個變數,比如:
class
d
{
private:
int
a;
public:
int
getint(){return
a;}
......
}
這里你的對象不能調用a的,
也就是不能
int
b;
d
d;//假設已經寫好了構造函數
b=d.a;//這是錯誤的,
但是你可以
b=d.getint();
這樣就可以把a的值給b了。
所有的public的函數都可以通過
<對象>.<函數名>
的方式來調用
E. C語言中函數內部聲明的靜態變數的在函數外可以訪問嗎
不可以
只有全局變數才可以
靜態變數,只是裡面的值不會因為函數調用結束而還原
F. c語言中靜態變數是怎麼用的
#include"stdio.h"
void
main()
{
int
f(int);
int
a=2,i;
for(i=0;i<3;i++)
printf("%d
",f(a));
}
int
f(int
a)
{
auto
int
b=0;
//aubo為自動變數的標志,則b為自動變數
static
int
c=3;//static
為靜態局部變數的標志,則c為靜態局部變數
b=b+1;
//b為自動變數,則b一直等於1
c=c+1;
//c為靜態局部變數,則c隨著for循環分別為4,5,6
return(a+b+c);
}
所以運行的結果為:7,8,9
註:靜態局部變數(靜態變數)是在編譯時賦初值的,即值賦初值一次,在程序運行時它已有初值,以後每次調用函數式不在重復賦初值而只在保留商城函數調用結束時的值。
G. 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);
}開始在稿紙上分析。
H. 有關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