❶ c語言什麼是外部變數是什麼意思
外部變數是在函數外部定義的全局變數,它的作用域是從變數的定義處開始,到本程序文件的結尾。在此作用域內,全局變數可為各個函數所引用。編譯時將外部變數分配在靜態存儲區。
有時要用extern來聲明外部變數,以擴展外部變數的作用域。 也可用static聲明外部變數,使該變數不能被其他文件引用。
用extern聲明外部變數
extern可省略不寫。
本文件里:在一個文件里,有不止一個函數,外部變數在第一個函數後面定義。若用extern在第一個函數前聲明該變數則該變數可以在第一個函數中使用。
多個文件中:在其他文件中若想要用該文件中已聲明的變數,則在文件頭部聲明該變數,即可在文件中使用。
用static聲明外部變數
static聲明後該外部變數就只能在本文件中使用。
❷ C語言在void函數中改變外部變數的值為什麼無效啊
要注意變數的作用域
定義一個全局變數a
你在changValue(int a, int b)函數中有參數, 變數名也為a, 和全局變數同名, 在此函數中, 所有a變數均是參數傳遞來的, 並不是全局變數a
解決方法為 改變函數參數的變數名: changValue(int aaa, int b)
如果你不想用全局變數, 那麼傳送a的地址到函數中, 也可改變a的值
❸ C語言函數外部變數問題
int i;//聲明全局變數 i
void prt();//聲明無返回值函數 prt()
main() //主函數入口
{
for(i=0;i<5;i++) //
prt(); //循環 執行 5次prt()函數
}
void prt() //prt()函數主體
{ for(i=0;i<5;i++)
printf(「%c」,』*』); //循環 執行 5次輸出"*"
printf(「\n」); //輸出換行符
}
❹ c語言外部函數改變調用函數變數的問題
但是如果原變數是數組,好像不用指針也能完成改變。這是為什麼---因為C語言數組作參數的時候是傳的首地址,也相當於指針
入swap函數的是&a,&b, 而swap函數本身卻是*a,*b,前面是實參,後面是形參,都是指針,完全不矛盾,聲明的時候*表示指針,實際的值加&表示指針,不要被表象迷惑
❺ C語言外部變數和靜態全局變數
int a:這是一個變數定義,就是說,在內存中分配了一段內存空間。然後告訴編譯叢散器,這個變數,能在所有代碼文件中被找到,被使用。
static int a:這是一個變數定義,就是說,在內存中分配了一段內存空間。然後告訴編譯器,這個變數,只能在它本身所處的代碼文件中被找到,被使用。
extern int a:這是一個聲明,就是說,告訴編譯器,聽說有這么一個變數,我要使用,你去找找看。
在一個程序中,對於一個變數的名字:
定義只可以出現一次。
聲明可以出現多次,只要神運每次出現的形式完滲瞎氏全一樣。
❻ c語言中關於外部變數應用的問題
可以賦值到函數里的形參,但不改變實參的值。因為實參傳給形參是值傳遞。形參是開辟新的地址接受實參傳給的值。。改變時只改變形參(即這個函數里的變數)。函數外部傳遞值進來的變數不改變。。
❼ c語言如何讓兩個函數里的變數同時改變。
建議你在定義弊蘆函數時先定義一個全局變數,這樣在引用時可以通過悄卜辯改變這個變數啟缺是的所有函數中的變數都能夠改版
❽ C語言關於外部變數
一般不把這兩句放在同一個源文件里。
第一個是一個變數的定義,第二個是變數的聲明。
在文件a.c中定義一個USER login_user;但是在文件b.c中要用到這個全局變數,就採用聲明的方法,extern USER login_user;來告訴編譯器,我需要用一個變數login_user;但是這個變數已經在別的文件中定義了——就這個意思。
聲明和變數定義的關系
一般在函數調用裡面
int func1(int a,int b)
{......}
int func2(......)
{
......
int x=1;
int y=2
func(x,y);
......
}
上面的x和y就是定義。而a和b就是聲明。
❾ 關於c語言外部變數的問題
int a = 0; //如果是全局變數,未初始化則自動初始化為0
int fun()
{
a=5;
}
int main()
{
fun();
}
你自己試一下不就知道了?全局變數的作用域是整個程序的生命周期。
比如C.c中
int a = 10;
main.c中
extern int a;
int fun()
{
a = 5;
}
main()
{
fun();
}
你自己試試吧。有不明確的就寫代碼自己確認。