在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中何為引數,引數的定義是什麼

引數一般出現在方法裡面。如 public void get string str,int age 在get後面的括號裡,就是形參,引數可以有很多中,具體情況需要結合實際的需求,去定義有效的引數,如果能幫助到樓主,請採納,萬分感謝 引數是用來傳遞資料的。以下是是本人學習筆記 不同型別的引數傳遞 如果需...

c 中在類中定義另只有帶引數建構函式的類的物件,編譯通不過

在b中定義 a a 是可以通過的,但在其他地方 比如函式中 這樣是不對的。在b中定義 a a 只是告訴編譯器 b有一個a類的物件 並不在定義的時候建立a這個物件成員,也就不考慮它的建構函式。a這個物件成員的建立是在執行b的建構函式時進行的,b的建構函式後面必須以初始化表的形式為a物件成員提供引數,比...

在c 中 main函式前面為什麼要加上資料型別比如int

c 就是這樣規定的,函式必須有返回值,無返回值的要加void,和c語言不一樣,c語言預設會返回int,不然,我用vc 6.0編譯會有警告,可以不於理睬,初學者一般用void就可以了. 風若遠去何人留 main函式的返回值是返回給主調程序,使主調程序得知被呼叫程式的執行結果。標準規範中規定main函式...