請問C 為什麼第二個和第三個結果都是21? 尤其是static求詳細解釋!! 謝謝

2025-03-16 10:50:24 字數 4246 閱讀 1379

1樓:匿名使用者

static表示儲存型別為靜態,所以它既不在堆中,也不在棧中,在程式執行的最開始就悶型已經開始構建這些靜態變數了。

你這裡的 static int sum 並不是成員變數,它在記憶體中只有乙份。對於你構造的物件 a和b而言,他們有著各轎罩慎自閉敬的成員變數abc,但sum都是同乙個。所以你 a b(4,5,6);把sum改成了21,不管a還是b訪問的都是同乙個sum。

2樓:

因為sum是由static修辭的靜態成員,而靜態成員在每個類只有乙個副本,由該類的所有物件共同維護和使用的,從而實現了同一類的不同對敗哪肆象緩羨之間的資料共享。

而且靜態資料成員是察轎存放在專門的分配空間中。

3樓:匿名使用者

sum是被static修飾的成員變棚亂量,它獨立於a類產生任意物件。

具體來說 a a產生了乙個sum物件。

執行到 a b時,sum物件不再產生,直接使用已有sum物件。

也就是sum被 a與b所共享。

因此在a產生b這個例項化腔和槐物件後,與展示的是同乙個sumstatic定義伍友的物件理解為全域性變數,它是可以被修改的。

不能被修改的用final

c++中的static 求解釋

4樓:網友

呼叫建構函式的過程叫初始化,呼叫等號操作符的過程叫賦值,比如下面的函式,第一次呼叫時,static int i=0之後,i的值為0,然後i=i+2,所以最後i的值是2,第二次呼叫初始化不起作用,static int i=0之後,i的值仍然是2,然後i=i+2,所以最後i的值是4.

void func()

你的這段程式沒錯,但是他並沒有體現出static的特點,加不加static都不影響執行結果。

static最大的用處還是在函式或者類成員變數中,像我上面舉得例子。

5樓:謝應宸

這個是區域性函式中static變數的乙個特性假設有區域性函式。

void func(void)

當我們在其他函式中第一次呼叫func函式時i = 100,i++後變成101;

j = 100,j++後變成101;

第二次呼叫func函式時。

i因為是static型別變數,只被初始化一次,所以第一次呼叫func函式時i的值是上一次計算後的結果也就是i = 101,i++後變成102;

而j又是從100開始,j++後變成101

這樣說應該清楚了吧。

6樓:網友

初始化只能有一次,而賦值卻有多次。但是因為它們都可以使用賦值操作符=來進行,所以很多情況下看起來是沒有區別的。

但是,在類(class/struct)的物件被初始化和賦值的時候就有區別了。比如。

class test

private:

int value;

上面的建構函式的寫法就是將類成員value在物件構造時初始化為0。

class test

private:

int value;

而這種寫法則是說,物件被構造的時候已經使用記憶體遺留的值來初始化value,然後再將0賦值給value。

7樓:網友

初始化是定義時賦值,在函式的呼叫中再次遇到初始化時會跳過該語句。

8樓:網友

static定義的變數儲存在靜態區,在程式沒有結束之前是不會被釋放的,當你下次使用時,它依然會保留上次執行的值,如果是普通的區域性變數的話,退出函式的時候就直接被釋放了,要使用的話,還得初始化。

請問以下c++程式的輸出結果是什麼,為什麼?謝謝

9樓:網友

樓主可能是被return(i=j+=i); 這個弄混了吧,這個返回的i其實早你傳入的引數,它的改變並不是你的i的改變,建議你把傳入的實參的名稱改一下,那樣就比較容易理解了,其實因為你的i剛開始賦值是1,而後面並沒有什麼操作去改變它,static int i=10,只是子函式里的乙個變數佈局,退出了那個函式,這個靜態變數也就不存在了,我們看到的還是原來的i,也就是值為1的那個,所以你認為它是1可能是自己把變數弄混了,仔細看看就可以弄清楚了。

10樓:風一樣的翔少

額!我c語言不是很強大! 關於你說的為什麼i一直為1,因為你寫了個i=1, 語法用錯了。。。關於 上面的 return中 我不懂。。。我只學最簡單的。。。愛莫能助!!

11樓:愛上榛子的核桃

你宣告瞭2個變數i,乙個是全域性變數,乙個是區域性變數。函式體內會優先使用區域性變數,所以你那個列印語句列印的是你區域性的i,這個i只賦值了1次等於1。那個全域性的i已經不是1了,但是你列印的不是它。

萬惡的全域性變數……

12樓:網友

i本身就被賦值1了當然要等於1了。

請問c++的這幾個強制型別轉換操作符的漢譯是什麼?謝謝!

13樓:網友

第乙個沒必要知道。

第缺絕二個:endl表示end line,一行結束,每行只能輸伏御姿乙個;表示回車,可以連續多個。

第三個:包含的函式不同,具體呼叫庫函拆族數時看清需要加入什麼標頭檔案。

c++怎麼過載<<和>>,標頭檔案是什麼,求詳細解釋,謝謝

14樓:網友

標頭檔案指使用include指令包含在程式頭部的檔案。

過載<<、運算子只需使用方法名operator<<、operator>>進行運算子的過載即可。

標頭檔案指使用include指令將預定義好的檔案包含在程式頭部,故的此名。而實際上標頭檔案並不一定要包含在檔案頭部,可以在需要的位置直接包含。

標頭檔案包含有兩種形式:即#include<>形式和#include""形式;區別在於<>直接在系統路徑下查詢標頭檔案,""從當前路徑開始查詢標頭檔案直至系統路徑。

對類物件進行運算子過載有友元和類成員方法兩種,友元比成員多乙個引數(該類物件的引用),過載運算子需要包含標準輸入輸出流 iostream標頭檔案,非成員函式的過載寫法如下:

#include

using std::ostream; // using namespace std;過於簡單粗暴 不建議使用。

using std::istream;

ostream& operator<<(ostream &out, const t &t)

istream& operator>>(istream &in, t &t)

如有不足,望請指正。

15樓:

舉例說,你想過載乙個類的標準輸入流,可以這樣做:

class yourclass;

friend istream & operator >>istream & is,yourclass obj)

c++ 求解釋下。。為什麼第二次輸出的a,b會是那個值 加了static會有什麼變化? #in

16樓:寂曉良雨靜

這是乙個程式,a輸出的結果都是前乙個a乘以2,而b輸出的第乙個結果是2×2=4,而這個結果就是end以後的輸出結果也都是4

下面是乙個統計學生平均分的c++程式,有個地方不懂,求解答,謝謝!

17樓:雙魚

static 靜態的,const常量 ,define巨集定義, 本質上的區別?不能相提並論何來區別。

以下c++氣泡排序程式,n是什麼意思? 如何理解這個程式,求詳細解釋 謝謝

18樓:網友

n 應該指的是整個陣列的大小 ,估計程式不完全,上面應該有#define n 5 定義 n 代表 5氣泡排序的思路: 相鄰兩個比較,把相鄰兩個排好序,如此進行n次,肯定排好序了。

如果不懂 歡迎追問。

19樓:惡魔

首先,你要理解什麼是氣泡排序,就是把所有的資料都比較一變後在排序第乙個迴圈呢,是迴圈多少次,就是說有多少個資料就迴圈多少次,因為每個都需要比較,第二個迴圈,是所有資料的比較,然後比較完了,選出最大的給t,就是這麼個情況。

請問c++ 第二個為什麼會錯誤?

20樓:匿名使用者

第二條錯誤: 本身static 靜態函式就不會修改唯或神非靜態物件的資料,因此函式後跟團穗const 顯然是不能再次宣告瞭。同樣violate也指虧不行。

是的什麼成語,什麼成語第二個字是者第三個字是不

第二bai 個字是的的成語 無的放矢 du 的 靶心 矢 箭 zhi。沒有dao目標亂射箭內。比喻說話做事沒有容明確目的,或不切合實際。有的放矢 的 箭靶子 矢 箭。放箭要對準靶子。比喻說話做事有針對性。移的就箭 移動箭靶靠近箭。比喻曲意遷就。第三個字是的的成語 冰解的破 冰凍融解,箭靶射中。比喻問...

指頭為什麼稱作食指,第二個指頭為什麼稱作食指

單看這兩個字,似乎是和食物有關啊,你還別說,食指最早的時候真的和吃的有關,古時候的人習慣用這根指頭去試探湯水,食物的冷熱和味道。然後會放在嘴裡嘗一下。別說過去,就連現在也有很多人有這個習慣呢。手的第二個手指為什麼叫食指?食指最早還真的和吃有關,但並不是吃手指的意思。古人習慣用這個指頭試探湯水 食物的...

劍三怎麼建立角色,劍三怎麼建立第二個角色

角色選擇介面右邊就有建立角色,但一個賬號最多只能有三個人物。大俠您好 看右邊有建立角色。如能幫到您,還請採納。劍三無法建立角色?大俠您好 現在的問題是你沒有弄清你具體是進的那個伺服器。由於伺服器合服,並沒有取消原來伺服器的名字。所以造成你看似進的其他伺服器,實際都是一個服。查清楚伺服器名字到底是那個...