在C 中,函式引數預設值為什麼不允許為區域性變數呢

時間 2021-06-25 14:47:02

1樓:小巷軒

區域性變數是你函式呼叫之後,才會被構造出來,而函式引數的值的存在,是在呼叫函式的時候就必須存在。一個是函式呼叫之後才存在,一個是函式呼叫之時就存在,你說,引數預設引數怎麼能為區域性變數呢!

2樓:

什麼意思 都預設了肯定要是一個定值 區域性變數肯定不是定值

3樓:匿名使用者

有些亂, 既然是區域性變數就是在函式內部的, 只有程式執行到這個變數定義處才會對其初始化。

而你函式的預設引數。。。

根本沒什麼關係的。

4樓:真理拾荒者

因為程式在執行時才會給程式中定義的變數開闢記憶體空間和進行初始化,函式是在被呼叫的時候才會給形參和函式體內定義的變數開闢記憶體空間,帶有預設形參的函式在給形參開闢空間後就回先把預設值賦給形參,若沒有實參傳遞,形參值就是預設值,預設值必須是系統能確切找得到的值才能進行對帶有預設值形參進行初始化,而區域性變數不是在正在被呼叫的函式內定義的(形參是函式一開始就定義的)或者在其他函式內定義並被使用完就被釋放掉了,因此係統就會找不到一個確切的值賦給形參,所以函式引數預設值不允許為區域性變數。

5樓:匿名使用者

所謂預設值就是一個預設的常量值,常量值當然不能是變數了。

c++中將一變數在一函式中定義為區域性靜態變數,可以再把這個變數在主函式中定義為動態變數嗎?它的值在

6樓:go無法呼吸的魚

不可以。c++的作用域從來沒有聽說過能夠後期更改的,變數的作用域在宣告的時候就已經確定,你只能更改它的值,卻不能更改它的作用域。下面舉個例子理解區域性靜態變數和動態變數:

1.首先理解區域性靜態變數:區域性靜態變數只初始化一次,該區域性靜態變數生命週期貫穿函式(該宣告所在)呼叫之後的時間。為了更加清楚,舉個例子,右邊為執行結果

2.理解主函式的動態變數:動態變數的生存週期只在主函式的花括號內,而且必須宣告後才能夠使用

3.不能夠在主函式中訪問其它函式的區域性靜態變數,結果會報錯

4.不能在同一個作用域裡宣告多個同名變數,但如果是巢狀關係,會導致覆蓋,例子如下:

注意事項:

不管是什麼型別的變數,我們都得注意它的作用域,以及它初始化幾次,不然會在這種小地方犯錯,導致整個專案有問題,而且排查起來很煩人。

7樓:匿名使用者

一個變數被定義出來的之後,型別就無法修改了,不過你可以再定義一個變數進行其他的操作。反正一個變數型別是無法改變的,但是可以轉換,只不過需要有一個轉換目標,這就需要用到另外一個已定義的變數了

8樓:匿名使用者

主函式的動態變數會把主函式中對這個變數的訪問都導向到主函式裡的這個動態變數。所以不會出現兩個的情況。

如下**:

#include

void fun()

intmain(void)

輸出結果為

in main i=9

in fun () i=8

after fun in main i=9可證明

c中函式引數指什麼?如何給函式的引數賦值

華師 c main函式的四種情況 static void main static int main static void main string args static int main string args 1.主程式main函式一共有以上四種版 2.一個程式中不能有兩個以上的main函式,有...

c中main函式中的引數有什麼作用在函式中加入參

main方法是程式的入口點,您將在那裡建立物件和呼叫其他方法,程式控制在該方法中開始和結束。一個 c 程式中只能有一個入口點。該方法在類或結構的內部宣告。它必須為靜態方法,而不應為公共方法。它接受預設訪問級別 private。它可以具有 void 或 int 返回型別。宣告 main 方法時既可以使...

c 中兩個函式函式名相同,引數型別和引數個數也相同,但是函式型別不同,那它們是過載函式嗎

函式過載只看引數個數和型別 所以如果只是返回值相同的函式就不是過載函式了 莊政警 這樣不是過載。函式過載要求函式的引數個數不同或者引數型別不同。因為呼叫函式的時候無法確認函式的返回型別,所以僅返回型別不同的函式都可以匹配,這樣就造成二義性,所以僅僅是返回型別不同是不能過載的,比如有int f int...