解決 C 語言中的靜態問題

發布 科技 2024-02-08
12個回答
  1. 匿名使用者2024-02-05

    這個問題需要了解系統在編譯時會給靜態變數分配記憶體,函式呼叫結束後不會釋放它們占用的記憶體單元,即變數的值是下次函式呼叫時上乙個函式呼叫的值。

    當 i=0 時,執行 a+=f(); 呼叫函式 f(); 在這種情況下,s=1+0,i=1;在 f() 函式中則 a=1;

    當 i=1 時,繼續執行 a+=f(); 呼叫函式 f(); 在本例中,s=1+1, i=2; 在 f() 函式中則 a=1+2=3

    當 i=2 時,繼續執行 a+=f(); 呼叫函式 f(); 在這種情況下,f() 函式中的 s=1+2, i=3那麼 a=3+3=6

    當 i=3 時,繼續執行 a+=f(); 呼叫函式 f(); 在本例中,s=1+3, i=4; 在 f() 函式中那麼 a=6+4=10

    當 i=4 時,繼續執行 a+=f(); 呼叫函式 f(); 在本例中,f() 函式中的 s=1+4, i=5那麼 a=5+10=15

    當 i=5 時,繼續執行 a+=f(); 呼叫函式 f(); 在本例中,f() 函式中的 s=1+5, i=6那麼 a=15+6=21

    此時,在 main 函式中 i=6,程式結束。 請注意,main 函式中的 i 與調製函式中的 i 無關。

    結果 : 21

  2. 匿名使用者2024-02-04

    如果不使用靜態變數,則 f() 中 i 的初始值始終為零,因此每次返回 s 時,它都是 1

  3. 匿名使用者2024-02-03

    靜態變數在定義時進行初始化。 int 型別的預設初始化值為 0。 在那之後,每乙個變化都會影響它。

    例如,在乙個程式中,每次呼叫 f 函式時,都會新增 i。 而不是每次呼叫 f 函式時都初始化 i。

    main 函式中的 i 與 f 函式中的 i 不同。 在 main 函式中,i 不是靜態的,而是由 main 函式本身宣告的 i,而在 f 函式中,main 函式的 i 是被遮蔽的。

  4. 匿名使用者2024-02-02

    少年,你算錯了,第一次s=1,i=0返回s=1;第二次 s=1, i=1 返回 s=2; 六次返回的 s 值是 ,加 = 21

  5. 匿名使用者2024-02-01

    在第 9 個陷阱問題中,每個案例後都沒有中斷; 所以,無論有多少M型別,最終的答案總是A

    問題8仍然是乙個陷阱問題,第二個如果被降級為第乙個else,這給人一種錯覺,認為它是else的乙個分支,調查的目的毫無意義,實際上它是乙個新的if,else判斷,與第乙個if無關else,所以x=y=-5

    問題 16. 當 i 是 2 和 3 的倍數時,會跳過該操作,因此首先輸出乙個介於 1 和 20 之間的數字,而不是 2 和 3 的倍數,然後將這些數字相加,將它們儲存為 s,最後輸出。

    最後乙個問題。 if(i==10)break;當我達到 10 歲時,它就會跳出來。

    因此,下面的邏輯運算數介於 1 和 9 之間。

    if(i%3 != 1)continue;

    這句話的意思是,如果 i 不是 1 for 3,則跳過運算,1 和 9 之間 for 3 是 1,只有 3 個數字 1、4 和 7,所以輸出是 147

    朋友,請【領養答案】,你的領養是我回答問題的動力,如果你不明白,請問。 謝謝。

  6. 匿名使用者2024-01-31

    9.輸入 65,應該輸出 b,但因為沒有 break 語句,所以輸出 a

    8.因為第乙個 else 後面跟著乙個分號,所以第乙個 if 被執行,第二個 if 被執行

    16.計算 20 以內的素數之和。

    13.計算餘數 1 除以 3 以 10 內的數字。

  7. 匿名使用者2024-01-30

    我個人覺得是一次,後來自己敲了一句**,發現k是輸出不了的,然後就是無數次迴圈,然後又看了for迴圈的裡面。

    實際上,它是這樣的:for(;; k=1;) k++;

    然後你仔細地比較這個for(; k==1;) k++;

    問題給出的for迴圈中的約束不存在,k=1實際上是每個迴圈開始時k的值等於1,如果換成k==1,那麼這個迴圈的條件就變成了k等於1,當迴圈可以進行時, 請注意 k=1,k==1 和 k==1 的差值,== 是判斷條件,= 是賦值,因此 k 的值為 1;

  8. 匿名使用者2024-01-29

    無限,是乙個賦值,而不是相等。

  9. 匿名使用者2024-01-28

    Hello int (*pt)[3] 這是乙個二維陣列,宣告了乙個不確定的線標記,主要區別於 int *pt[3],後者是乙個帶有 3 個指標、變數的指標陣列。

    給房東舉個例子,幫助你理解:

    #include

    int main(void)

    ;int (*pt)[3];

    int i,j;

    pt=a;這是將二維陣列名稱 a 分配給動態二維陣列 pt,正是因為 pt 的線標不確定,那麼 pt 是可以賦值的指標變數,陣列 a 是確定 a 是指標常量的線標記。

    printf("a:");

    for(i=0;i<2;i++)

    printf("pt:");

    for(i=0;i<2;i++)

    printf("");

    return 0;

    你會發現程式的結果和A是一樣的,這證明了它的正確性,希望對你有幫助。

  10. 匿名使用者2024-01-27

    可以這樣理解:

    int a=1;

    pt=&a;將 a 的位址分配給 pt;

    2:[3] 表示陣列變數;

    則 (*pt)[3] 表示指標型別變數的陣列,其個數為 3;

    int(*pt)[3] 表示乙個數字為 3 的 int 型別的指標變數陣列。

    所以我個人覺得答案是b

  11. 匿名使用者2024-01-26

    定義了乙個由三個元素組成的陣列,每個元素都是乙個指向記憶體空間 int 的指標變數,答案是

  12. 匿名使用者2024-01-25

    () 具有最高優先順序,因此您應該能夠稍微理解它。

    #define qt *pt

    int qt[3];

相關回答