『壹』 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語言外部變數的問題
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();
}
你自己試試吧。有不明確的就寫代碼自己確認。
『叄』 C語言 外部變數函數的調用
main()中的extem
a;改為extem
int
a;
extem用於將用於將其他源文件的函數或變數的作用范圍擴大到整個程序。在定義是不需要,只有在應用前用申明語句申明即可,如extern
void
print(int
n);
你也沒說哪不懂,只能回答這么多了,希望對你有幫助
『肆』 c語言中外部變數如何使用,看看這題,,為啥輸入extern為啥無法輸出,大神們圍觀一下
假設有兩個文件a.c和b.c。
在a.c中定義了int x;
在b.c中聲明extern int x;
其實在編譯階段a.c生成了a.obj。b.c生成了b.obj。
a.obj中定義了x這個變數。b中沒有定義該變數,那麼b中怎麼用該變數呢?
答案是在link階段將a.obj和b.obj鏈接起來。在這個鏈接過程中,b會去外部找b中聲明的所有外部變數,在鏈接的所有對象中,發現a.obj中存在此對象,則將其記錄下來,後面b運行時需要x變數時就訪問了a中的變數了。
所以用extern聲明的變數只要定義到另外一個文件中即可。然後把這兩個文件鏈接起來就行了。
『伍』 c語言,變數的定義和使用
變數的聲明有兩種情況:
1、一種是需要建立存儲空間的。例如:int a 在聲明的時候就已經建立了存儲空間。
2、另一種是不需要建立存儲空間的。 例如:extern int a 其中變數a是在別的文件中定義的。
前者是「定義性聲明(defining declaration)」或者稱為「定義(definition)」,而後者是「引用性聲明(referncing declaration)」,從廣義的角度來講聲明中包含著定義,即定義是聲明的一個特例,所以並非所有的聲明都是定義,例如:int a 它既是聲明,同時又是定義。然而對於 extern a 來講它只是聲明不是定義。一般的情況下我們常常這樣敘述,把建立空間的聲明稱之為「定義」,而把不需要建立存儲空間的聲明稱之為「聲明」。很明顯我們在這里指的聲明是范圍比較窄的,即狹義上的聲明,也就是說非定義性質的聲明,例如:在主函數中:
int main() {
extern int A;
//這是個聲明而不是定義,聲明A是一個已經定義了的外部變數
//注意:聲明外部變數時可以把變數類型去掉如:extern A;
dosth(); //執行函數
}
int A; //是定義,定義了A為整型的外部變數
外部變數的「定義」與外部變數的「聲明」是不相同的,外部變數的定義只能有一次,它的位置是在所有函數之外,而同一個文件中的外部變數聲明可以是多次的,它可以在函數之內(哪個函數要用就在那個函數中聲明)也可以在函數之外(在外部變數的定義點之前)。系統會根據外部變數的定義(而不是根據外部變數的聲明)分配存儲空間的。對於外部變數來講,初始化只能是在「定義」中進行,而不是在「聲明」中。所謂的「聲明」,其作用,是聲明該變數是一個已在後面定義過的外部變數,僅僅是為了「提前」引用該變數而作的「聲明」而已。extern 只作聲明,不作任何定義。
(我們聲明的最終目的是為了提前使用,即在定義之前使用,如果不需要提前使用就沒有單獨聲明的必要,變數是如此,函數也是如此,所以聲明不會分配存儲空間,只有定義時才會分配存儲空間。)
用static來聲明一個變數的作用有二:
(1)對於局部變數用static聲明,則是為該變數分配的空間在整個程序的執行期內都始終存在。
(2)外部變數用static來聲明,則該變數的作用只限於本文件模塊。
『陸』 c語言中關於外部變數應用的問題
可以賦值到函數里的形參,但不改變實參的值。因為實參傳給形參是值傳遞。形參是開辟新的地址接受實參傳給的值。。改變時只改變形參(即這個函數里的變數)。函數外部傳遞值進來的變數不改變。。
『柒』 C語言 外部變數函數的調用
main()中的extem a;改為extem int a; extem用於將用於將其他源文件的函數或變數的作用范圍擴大到整個程序。在定義是不需要,只有在應用前用申明語句申明即可,如extern void print(int n);
你也沒說哪不懂,只能回答這么多了,希望對你有幫助
『捌』 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語言外部函數改變調用函數變數的問題
但是如果原變數是數組,好像不用指針也能完成改變。這是為什麼---因為C語言數組作參數的時候是傳的首地址,也相當於指針
入swap函數的是&a,&b, 而swap函數本身卻是*a,*b,前面是實參,後面是形參,都是指針,完全不矛盾,聲明的時候*表示指針,實際的值加&表示指針,不要被表象迷惑
『拾』 c語言什麼是外部變數是什麼意思
外部變數是在函數外部定義的全局變數,它的作用域是從變數的定義處開始,到本程序文件的結尾。在此作用域內,全局變數可為各個函數所引用。編譯時將外部變數分配在靜態存儲區。
有時要用extern來聲明外部變數,以擴展外部變數的作用域。 也可用static聲明外部變數,使該變數不能被其他文件引用。
用extern聲明外部變數
extern可省略不寫。
本文件里:在一個文件里,有不止一個函數,外部變數在第一個函數後面定義。若用extern在第一個函數前聲明該變數則該變數可以在第一個函數中使用。
多個文件中:在其他文件中若想要用該文件中已聲明的變數,則在文件頭部聲明該變數,即可在文件中使用。
用static聲明外部變數
static聲明後該外部變數就只能在本文件中使用。