-
實際上,你可以這樣理解問題,int
a=1,b=2;可以看出,a、b是實數引數,1和2是形式引數,所以在呼叫函式swap(a,b)時,傳遞的是形式引數,即傳遞的是1和2,而不是傳遞a和b。 則 swap(a,b) 是 swap(1,2)。
因此,轉換後的輸出引數值是交換後的值,實際引數仍為原始值
-
不可以,在C語言中,有位址值和引數值,引數值只能將實際引數傳遞給表單引數,所以選項A是正確的。 C 語言中的外部變數可以在函式之間傳遞資料。
C 中的自動變數是預設變數,它實際上是函式中的區域性變數,因此 d 選項是正確的。 全域性變數一旦定義,就需要分配記憶體單元,並且在程式執行過程中會從頭到尾占用固定的空間,所以在記憶體未知的情況下最好不要使用全域性變數。
呼叫函式時,可以雙向傳遞值,對使用全域性變數還是區域性變數沒有限制,需要根據程式的邏輯需要進行選擇。
-
void fun(int arr,int n);
定義函式時,引數 int arr 不表示元素的值,而是告訴編譯器第乙個引數是乙個陣列指標,可以接收從引數傳遞的陣列位址。
實際上,上面的定義等同於下面的定義。
1.陣列中的元素數:
void fun(int arr[常量], int n);
這裡的常量可以是任何正整數,實際上編譯器會忽略它,因為它只是告訴編譯器我正在接收乙個陣列指標,它有多少個元素並不重要,因為引數只是乙個位址。 元素的數量由引數 2 控制。 至於為什麼同意這一點,您可以看到下面的補充說明。
fun(int *arr, int n);
使用指標,這種方式和問題中的方式是最常用的,而第一種是最少使用的。
想象一下,有乙個如下函式。
int fun(int nums[1000], int size) 它的引數 乙個人必須處理乙個超過 1000 個元素的陣列,如果要傳遞每個元素的值,那麼在函式體中,你必須申請超過 1000 個整數記憶體,並且你還需要從引數中複製值, 這是非常耗時且不必要的,因為記憶體中的某個塊已經儲存了這些資料。只要告訴我把它放在哪裡,你就可以在那裡找到它。 這都是關於傳遞位址的,你只需要傳遞陣列的第乙個位址,然後告訴要處理多少個元素。
傳遞位址只需要將位址複製到表單引數中,這比傳遞每個元素要快得多。
-
int arr 相當於 int *arr,是指標型別,array 是陣列的第乙個位址,位址是指標,當然可以賦值。
-
引數是傳遞給函式的資料。
引數是正在傳遞的資料。
例如,有乙個函式 fum(int a)。
在 main 函式中定義的變數 int b
那麼 b 是真正的引數。
A 是引數的形式。
類似於使用QQ將檔案傳送給其他人。
您的檔案稱為 real 引數。
正在傳輸並最終由其他人傳輸的檔案稱為引數。
-
表單引數:全名"形式引數"它是定義函式名稱和函式體時使用的引數,用於接收呼叫函式時傳遞的引數。
實際引數:全名"實際引數"它是在呼叫函式時傳遞函式的引數。
當引數和引數不是指標型別時,當函式執行時,引數和引數是不同的變數,它們位於記憶體中的不同位置,引數複製引數的內容,引數在函式末尾釋放,而引數不變。
如果函式的引數是指標型別變數,則在呼叫函式的過程中,引數的位址在函式中傳遞,引數的位址也在函式體內部使用,即使用引數本身。 因此,在函式體內部,可以更改引數的值。
舉個很簡單的例子:
int f(int b) *b 是引數 *main()。
-
存在以下差異:1.主體不同:呼叫引數時,函式名稱後括號內的引數為“實際引數”。 引數不是實際變數,也稱為虛擬變數。
2.用途不同:引數可以是常量、變數或表示式,無論引數是什麼型別的量,在進行函式呼叫時都必須有確定的值,以便這些值可以傳遞到引數中。
需要注意的是,當引數和引數不是指標型別時,函式執行時,引數和引數是不同的變數,它們位於記憶體中的不同位置,引數會複製引數的內容,引數在函式末尾釋放, 而引數不會改變。
-
引數出現在函式定義中,可以在函式的整個主體中使用,但不能在函式外部使用。 引數出現在調性功能中,進入調製功能後無法使用。
引數變數僅在呼叫記憶體單元時分配記憶體單元,並且在呼叫結束時,分配的記憶體單元將立即釋放。 另一方面,引數是在音調函式中分配的記憶體單元。
引數可以是常量、變數、表示式、函式等,無論它們是什麼型別的引數,在進行函式呼叫時都必須具有確定的值,以便將這些值傳遞給引數。
引數和引數在數量、型別和順序上應嚴格一致,否則會出現型別不匹配錯誤。
函式呼叫中發生的資料傳輸是單向的。 也就是說,引數的值只能傳遞給引數,而引數的值不能反向傳遞給引數。
-
實際引數是主函式給出的實際引數,稱為子函式,進入子函式後,子函式會將實際引數的副本複製到子函式內部的區域性變數中,即表單引數。
-
引數是呼叫函式時寫的引數,引數是函式內部使用的引數,呼叫函式時應該建立乙個引數的臨時變數,然後在需要時將臨時變數轉換為引數的型別,然後將變數分配給引數以銷毀臨時變數, 而函式返回後的變數和函式的返回值也與過程類似。
-
簡單地說,函式定義中使用的引數是呼叫函式時的引數。 實數引數傳遞給 form 引數的單向值。
-
實數引數和表單引數的區別:
1.分配給實數和表單引數的位址不同。 可以比作一棟別墅,人參是另一棟別墅。 人參的內容被複製並移到人參中,別墅的內容被扔掉或新增新東西,這不會影響別墅。
2.如果不使用指標或引用,實引數只能將事物(值)傳遞給引數,就像上面的例子一樣,引數中的事物可以複製並移動到引數中,引數中的事物(值)發生了變化,但不會反向傳遞,即引數中的事物不會覆蓋引數中的事物(值)。
3.簡單來說,引數的位址和引數操作是不同的,如果需要獲取更改的值,一般使用return來返回值,如果要更改引數,則使用指標或引用來實現,這樣位址的操作使引數操作起來更加方便。
4.引數的範圍僅限於定義的函式,一旦函式出來,定義的引數就會被釋放。
若要通過傳遞函式來更改變數的值,必須傳遞位址。 您的程式正在傳遞變數 swap(a,b) 的值; 如果要更改變數的值,必須傳遞變數的位址,或者通過指標來傳遞,如果是陣列,可以直接使用陣列名稱,但如果是陣列的元素,則仍然需要使用位址。 就像樓上的那個改變他一樣。 >>>More
分配給引數的位址和引數是不同的。
如果不使用指標或引用,引數只能將某物(value)傳遞給引數,就像上面的例子一樣,帶有引數的事物可以複製並移動到引數中,引數中的事物(value)被更改但不會反向傳遞,即引數中的事物不會覆蓋引數的事物(值); >>>More
範圍。 你靜態字元 *chh;
static char *ch1;雖然兩個指標指向的位址沒有變化,但你有沒有想過它們指向的記憶體位址是否已經釋放,char chc[10]; 它是本地的,函式已經結束,生命週期已經結束,你正在嘗試使用 void times() 中的指標訪問它。 >>>More