A. c語言,函數在主函數外部聲明,包括定義都要放在主函數前面嗎
函數定義可以寫到其它(任意)函數的前或後。
只是,在使用函數前,如果當前位置處於函數定義之後,則不需要聲明函數,可以直接使用。如果當前位置處於函數未定義階段(函數定義在其後面),則要先進行函數聲明,才可以使用函數。
聲明可以寫在函數體內,也可以在函數體外進行聲明!
B. c語言函數的調用和聲明
假設主函數main()。其他函數void fun(int a,int *b)。
關於函數定義和聲明:
在代碼中fun函數,有完整函數體的代碼就是函數定義部分,比如void fun(int a,int *b){。。。};。
如果沒有具體實現的函數體代碼(也就是大括弧內容),那麼就是函數聲明。比如void fun(int ,int *);
關於函數聲明和調用:
如果fun函數定義在main代碼上面。比如:
void fun(int a,int *b){。。。};
int main(){
int a=0,int b=0;
......
fun(a,&b);//這里fun定義代碼在main上面,所以可以不需要聲明。反之需要先寫聲明語句
return 0;
}
關於函數局部變數及全局變數:
簡單區分:
定義在函數之外的就是全局變數,這個變數所有函數都可以直接使用,並且共用同一個地址。任意函數修改了變數值,其他函數調用也會變。
定義在函數之內的就是局部變數,局部變數只屬於該函數,其他函數即使定義了同樣名字的變數,這兩個變數也不同地址,互不相干。
比如:
int a;//這就是全局變數,作用域下所有函數共用
int main()
{
int b;//這就是局部變數,只在本函數有效,如果想在調用fun函數時讓fun也使用該變數,需要把這個變數的地址作為參數傳遞過去。
printf("%d",b);
return 0;
}
注意:c語言中允許局部變數和全局變數同名,但是同名的局部變數會屏蔽全局變數,實際代碼避免同名。
關於函數傳值和傳址:
如函數void fun(int a,int *b){..........};這里形參a 和*b,分別表示一個值和一個地址
所以在調用該函數時,比如:
int main()
{
int c,d;
fun(c,&d);//這里調用就對應上面形參類型,第一個參數傳遞了c的值(傳值),第二個參數傳遞了d的地址(傳址),這里c和&d,叫做實參。當fun函數運行時改變了a和b指向地址的值,對應main函數中c的值不變,d的值改變。
return 0;
}
順帶一說:局部變數,在函數運行結束後會自動釋放,所以想把局部變數地址作為返回值,需要用malloc函數申請。(這里看不懂可以暫時忽視)
C. C語言函數聲明是要在主函數內部還是外部啊
函數聲明定義 放在 主函數以外,與主函數地位 並列,不能放在主函數以內。
函數定義 放在 主函數 以後,那麼在 主函數以前,或 在主函數聲明部分(語句以前)要添加函數原型聲明。
函數聲明定義,若放在主函數以前, 主函數中 則 不需要 函數原型聲明。
程序結構:
int main()
{
int process(int u,int t,int (*p)(int u,int t)); // 函數原型聲明
int a,b,c[3],i;
int max(int x,int y); // 函數原型聲明
int min(int j,int k); // 函數原型聲明
int sum(int q,int w); // 函數原型聲明
scanf("%d%d",&a,&b); // 這是語句,要放到聲明以後,所以搬動到這里
。。。 // 其他語句
}
int max(int x,int y) // 函數聲明定義,在主函數以後
{if(y>x)x=y;
return x;
}
。。。 // 其他 函數聲明定義
D. c語言 外部函數聲明與否問題
當不提供函數原型,而調用處嘗不知道返回值類型,此時編譯器黙認返回值為整型,而實際返回類型並不是整型,結果沒有做正確的數據類型轉換,取到的就是錯誤的數據
你可以在return sum;前列印這個結果,看看計算時是否正確,
同時在循環體中列印出來各個元素值,看看傳參數是否正確,如果這兩處都還正確則說明只是返回值未正確類型轉換。
E. 在C語言中函數聲明放在主函數外和主函數內有什麼區別
放在主函數外,從它的位置往下所有的函數都能調用該函數
而在主函數內,只有主函數能訪問該函數
F. C語言裡面,函數在main裡面聲明和在main外面聲明有什麼不一樣呢
很高興為你回答,希望可以幫到你,
對於你提的問題,你要明白的是作用域,在不用的地方申明,那作用域也就不同,那麼在main里邊聲明也就只能在main函數里起作用(函數內聲明叫局部聲明,反之在函數外部聲明就叫全局聲明)。所以如果你聲明在外部,那麼從申明開始之後的代碼都能使用它,以上的還是不行哈。
提示:對於函數聲明,工程上一般都聲明在函數外部,且聲明在頭文件中,以便其它文件也能用,局部函數除外。明白嗎?不明白可以再問。
G. c語言中允許用外部聲明來指定變數、函數 和其他標識符特徵,這里的外部是指
是不是extern 外部是指不再不同一個文件裡面
H. C語言中,在main()函數外聲明函數和函數內聲明函數有何區別
//聲明在函數外,聲明後面的函數(無論main還是其他函數)都可以調用
//聲明在函數內部,只能在本函數內,聲明後面的區域可以調用
I. C語言中在函數外部聲明的變數是什麼變數
在函數外部聲明的為全局變數.
帶static的是靜態全局變數, 作用域為當前文件.
不帶static的是全局變數, 作用域為整個程序.
所有全局變數的生命周期都是整個程序運行
J. c語言函數聲明
假設主函數main()。其他函數void fun(int a,int *b)。
關於函數定義和聲明:
在代碼中fun函數,有完整函數體的代碼就是函數定義部分,比如void fun(int a,int *b){。。。};。
如果沒有具體實現的函數體代碼(也就是大括弧內容),那麼就是函數聲明。比如void fun(int ,int *);
關於函數聲明和調用:
如果fun函數定義在main代碼上面。比如:
void fun(int a,int *b){。。。};
int main(){
int a=0,int b=0;
......
fun(a,&b);//這里fun定義代碼在main上面,所以可以不需要聲明。反之需要先寫聲明語句
return 0;
}
關於函數局部變數及全局變數:
簡單區分:
定義在函數之外的就是全局變數,這個變數所有函數都可以直接使用,並且共用同一個地址。任意函數修改了變數值,其他函數調用也會變。
定義在函數之內的就是局部變數,局部變數只屬於該函數,其他函數即使定義了同樣名字的變數,這兩個變數也不同地址,互不相干。
比如:
int a;//這就是全局變數,作用域下所有函數共用
int main()
{
int b;//這就是局部變數,只在本函數有效,如果想在調用fun函數時讓fun也使用該變數,需要把這個變數的地址作為參數傳遞過去。
printf("%d",b);
return 0;
}
注意:c語言中允許局部變數和全局變數同名,但是同名的局部變數會屏蔽全局變數,實際代碼避免同名。
關於函數傳值和傳址:
如函數void fun(int a,int *b){..........};這里形參a 和*b,分別表示一個值和一個地址
所以在調用該函數時,比如:
int main()
{
int c,d;
fun(c,&d);//這里調用就對應上面形參類型,第一個參數傳遞了c的值(傳值),第二個參數傳遞了d的地址(傳址),這里c和&d,叫做實參。當fun函數運行時改變了a和b指向地址的值,對應main函數中c的值不變,d的值改變。
return 0;
}
順帶一說:局部變數,在函數運行結束後會自動釋放,所以想把局部變數地址作為返回值,需要用malloc函數申請。(這里看不懂可以暫時忽視)