A. c語言改變全局變數
你只是聲明了函數,而不是調用:
#include"stdio.h"
inti=0;
intmain(void)
{
printf("%d",i);
voidadd(void);//這是個聲明
add();//這是調用,下同
printf("%d",i);
voidadd_2(void);
add_2();
printf("%d",i);
}
voidadd(void)
{
i+=1;
}
voidadd_2(void)
{
i=1;
}
或者把函數的定義放在前面也能充當聲明:
#include"stdio.h"
inti=0;
voidadd(void)//放前面
{
i+=1;
}
voidadd_2(void)
{
i=1;
}
intmain(void)
{
printf("%d",i);
add();//函數定義放前面就不用聲明了
printf("%d",i);
add_2();
printf("%d",i);
}
B. 全局變數為何是靜態存儲類型,它的值不能被改變嗎
每個程序運行的時候,系統會為程序分配4個區(棧區、堆區、靜態區、代碼區),(對於c語言而言)。
棧區存放auto變數,也就是臨時變數。堆區存放堆變數(也就是malloc的地址,手動分配內存的方式)。代碼區存放你寫的程序代碼。而靜態區存放的就是全局變數和常量的,(靜態區也細分為全局區和常量區(在linux下))。
所以常量的存儲方式為靜態存儲。這種層的東西國人也就是理解層面的,不深。
你可以自己查查有關內存四區的知識,或者看看嗨翻c這本書。
C. 單片機C語言中的全局變數可以被修改嗎
定義了全局變數就表示在這個函數a都為10.如果在主函數里或是其他自定義函數把a的值改變,則a變為了局部變數,則主函數里或是其他自定義函數中的a會覆蓋掉全局變數中的a,也就是說在主函數里或是其他自定義函數中的a只是臨時變數,當函數運行完,這個函數中的a壽命就終止了。當退出了這個函數後,a的值恢復到全局變數的10,全局變數是伴隨著整個程序的。最好還是自己寫程序實驗,這樣印象深刻。