簡體   English   中英

全局變量和局部變量存儲在C中的內存中的位置

[英]where the global and local variables are stored in memory in C

我使用Aurix MUC,我試圖在執行程序后讀取內存的內容,以了解他在回憶錄中寫的內容

我注意到當我在函數中使用全局變量時,在函數中處理后,此全局變量的新值未寫入內存。

這是一個例子:

int a = 100;

void plus (int a)

{

 a = a + 17;

}

int main (void)

{

 plus(a);

 return 0;

}

當我顯示內存的內容時,我發現a的值100

並且我找不到通常為117的a的新值。

我試圖將變量a聲明為volatile,但它沒有任何改變

另一方面,如果我像這樣直接在主體中進行計算

int a = 100;

int main (void)

{

 a = a + 17

 return 0;

}

這樣,我在內存中找到值117。

所以我需要了解在調用函數中使用的保存變量值在哪里?

以及為什么a的新變量未寫入內存,

為什么在局部聲明的變量也沒有寫在內存中?

在此代碼中:

int a = 100;

void plus(int a)
{   
    a = a + 17;
}

int a in int a void plus(int a)聲明a的新實例, a實例隱藏了先前的a 然后,在a = a + 17; ,則使用a新實例。 要在函數外部plus a聲明的a ,請使用:

int a = 100;

void plus(void)
{
    a = a + 17;
}

另外,在main ,更改plus(a); plus();

在C語言中,每個標識符都有一個scope ,在哪里可見源代碼。 任何函數外部的聲明都具有文件范圍 ,這意味着聲明的標識符在整個文件中都是可見的(技術上是翻譯單元 )。 在函數定義中,參數的聲明具有與函數關聯的塊作用域 -僅在函數內可見。

因為int a = 100; 具有文件作用域,您無需plus聲明就可以使用它-它在函數內部可見,因此您可以使用它而無需新的聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM