[英]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.