C語言為什麼通常形參與實參的變數符號不同

2022-09-24 20:20:20 字數 5556 閱讀 7786

1樓:淦海瑤

沒問題啊,都是區域性變數,隨便你使用

你的問題,有兩個地方說明一下

一個是變數作用域問題,區域性變數起作用的地方是,從宣告變數開始到包含變數的函式結束為止

全域性變數,從宣告這個變數開始,到這個檔案的末尾

例如你的程式,ab在主函式中,作用域就是在主函式當中,出了這個函式,就不起作用了

在子函式中,兩個引數,只有在這個子函式中起作用,

另一個是,這個大家經常犯得問題,在子函式中改變了變數的資料,在主函式中,是不起作用的(指標方面,其實指標的地址資料沒有變,只是指向的地址中的內容資料變了)

如果都是同一個名字,你覺得會怎樣,你覺得子函式中改變了,但是主函式中其實沒有變

這個就是子函式中的引數,其實是呼叫時的引數的一個影子,不會影響到主函式

也就是說,子函式中引數變數的名字無所謂,都是區域性變數

只是為了區分,所以多寫一些變數名而已,編譯成exe,這些都毛用沒有。不會因為你變數名字的問題,而編譯出來的程式有絲毫的差別

2樓:匿名使用者

只是程式設計師的一種習慣問題,一般都寫成一樣的,自己看著方便,別人看著也容易理解分析,畢竟程式不是隻寫給自己的

3樓:每日讀看抖

理論上是沒有區別的,但是你定義了abc了 即abc 是要輸入數字的變數。而xy是abc的變數

4樓:匿名使用者

1.首先函式宣告最好放在函式體之外;

2、函式宣告中的形參中的變數名可寫可不寫;

3、不同的函式中區域性變數的名字可一樣也可不一樣。

5樓:殳韻楣

那個完全可以由你自己設定,它不影響程式所要實現的功能.

6樓:可可阿文

便於區分,但是我一般都保持變數名相同,但是他們的型別一定要相同

c語言中形參和實參的區別?

7樓:皮囊之下

函式的形參和實參區別如下:

1. 形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。函式呼叫結束返回主調函式後則不能再使用該形參變數。

2. 實參可以是常量、變數、表示式、函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使實參獲得確定值。

3. 實參和形參在數量上,型別上,順序上應嚴格一致,否則會發生型別不匹配」的錯誤。

4. 函式呼叫中發生的資料傳送是單向的。即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函式呼叫過程中,形參的值發生改變,而實參中的值不會變化。

實參(argument):

全稱為"實際引數"是在呼叫時傳遞給函式的引數. 實參可以是常量、變數、表示式、函式等, 無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。

形參(parameter):

全稱為"形式引數" 由於它不是實際存在變數,所以又稱虛擬變數。是在定義函式名和函式體的時候使用的引數,目的是用來接收呼叫該函式時傳入的引數.在呼叫函式時,實參將賦值給形參。

因而,必須注意實參的個數,型別應與形參一一對應,並且實參必須要有確定的值。

形式引數:形參是函式被呼叫時用於接收實參值的變數。

根據實際需要可有可無。沒有形參時,圓括號也不可省;多個引數之間應用逗號分隔。引數包括引數名和引數型別。

8樓:匿名使用者

在c中由於函式的呼叫就伴隨著介面的問題。

一個函式就是用來實現一個功能的,

如:#include

int add(int a,int b)//把兩個數相加int main()

它相當於一個處理資料的機器,而資料就是原材料,這就需要一個材料的輸入口,就是函式設計的介面,在這個過程中我們首先定義了一個函式add(int a,int b)(製造了一臺機器),在定義這個函式的時候由於我們只是賦予它這個使兩個數相加的功能,但是定不知道它將把那兩個數相加,所以就先給它設定是對a,b相加,(就像我們只是造了機器,知道它的作用而沒有原料)這時的a,b就是形參,即它只是一個形式上的資料,是定義在函式中的。

而實參就是在呼叫函式的時候要向形參傳遞值,如num1,num2,(它就是機器要開工時需要的原料,有了它機器才能進行加工),我們實際上是要吧num1,num2相加,只是在主函式裡寫**太繁雜,就把**寫到函式裡邊。這時形參a,b被賦予了num1,num2的值後就可以代替num1,num2在add函式體中完成本想對num1,num2進行的操作(至於為什麼要用實參形參還涉及到資料的作用域的問題)

9樓:獨日律勇

形參必須是變數,實參可以使常量變數表示式。形參可以有預設值,對於有預設值的形參呼叫函式是可以不寫實參,函式按照形參的預設值計算。其實形參和實參在程式設計時最大的區別是形參是函式內部用的,而實參是傳給函式是用的,或者說呼叫函式時用的。

10樓:

//形參和實參

//形參:只有在呼叫時才有值。可以是常量、變數、表示式、函式等。

//實參:有實際的值。使用中是把實參的值給形參用。實參只在自己的函式內使用。

具體問題具體分析最好,有問題私信。

11樓:

如int func(int a) // a即func形參,寫函式**時,給傳給這個函式的引數取的名字

int main()

12樓:匿名使用者

傳形參改變的是函式內的值,傳實參是同時改變函式外的值。

13樓:匿名使用者

高階語言在設計程式模組時,模組名定義後,緊跟其後所定義的引數(括弧內)被稱為形參(也稱虛參)。當該模組被呼叫時,在主調模組中,出現在被呼叫的模組名後的引數被稱為實參。實參代替虛參的過程被稱為虛、實結合,也稱換參。

多數高階語言的換參是由編譯系統來完成,比如c語言和fortran語言亦是如此。basic語言的換參則是由程式設計人員來完成的。如果只允許實參向虛參傳遞,則被稱為「單向傳遞」,c語言的變數類虛、實結合即是「單向傳遞」。

如果同時允許虛參向實參傳遞,這種傳遞被稱為「雙向傳遞」,fortran 語言定義的子程式即是如此。

14樓:匿名使用者

1、形參 form parameter實參 real parameter

出現在函式定義中的引數,就叫形參

出現在函式呼叫中的引數,就叫實參

2、例如:

函式定義:

int max( int a , int b ) //這裡的a,b就是形參

函式呼叫

int main()

15樓:匿名使用者

形參就是函式定義裡的各種運算引數。例如:

int fun(int a,double c);

a,c就是形參。

實參是形參被具體賦值之後的值,參加實際的運算,有實際作用。

16樓:早早瓦

形參:就是抽象的

實參:就是具體的

17樓:匿名使用者

四樓說的全是複製的吧,一個字都不少啊

18樓:匿名使用者

形式引數和實際引數

函式的引數分為形參和實參兩種。在本小節中,進一步介紹形參、實參的特點和兩者的關係。形參出現在函式定義中,在整個函式體內都可以使用,離開該函式則不能使用。

實參出現在主調函式中,進入被調函式後,實參變數也不能使用。形參和實參的功能是作資料傳送。發生函式呼叫時,主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。

函式的形參和實參具有以下特點:

1. 形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。函式呼叫結束返回主調函式後則不能再使用該形參變數。

2. 實參可以是常量、變數、表示式、函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使實參獲得確定值。

3. 實參和形參在數量上,型別上,順序上應嚴格一致,否則會發生型別不匹配」的錯誤。

4. 函式呼叫中發生的資料傳送是單向的。即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函式呼叫過程中,形參的值發生改變,而實參中的值不會變化。

【例】可以說明這個問題。

main()

int s(int n)

本程式中定義了一個函式s,該函式的功能是求∑ni的值。在主函式中輸入n值,並作為實參,在呼叫時傳送給s 函式的形參量n( 注意,本例的形參變數和實參變數的識別符號都為n,但這是兩個不同的量,各自的作用域不同)。在主函式中用printf 語句輸出一次n值,這個n值是實參n的值。

在函式s中也用printf 語句輸出了一次n值,這個n值是形參最後取得的n值0。從運**況看,輸入n值為100。即實參n的值為100。

把此值傳給函式s時,形參n的初值也為100,在執行函式過程中,形參n的值變為5050。返回主函式之後,輸出實參n的值仍為100。可見實參的值不隨形參的變化而變化。

c語言中形參與實參;區域性變數與全域性變數的區別 30

19樓:

實參是指函式呼叫時傳入的引數,實參會被壓入棧中,入棧過程由push命令實現。

形參是指函式定義中宣告的引數,形參從棧中獲取實參的值,以此實現值傳遞。注意,從棧中獲取值並不是通過pop命令實現的,因為棧頂是呼叫函式的那條語句的地址,所以不能使用pop,而是使用mov。

函式入口處,會先上移棧頂指標esp,空出來的部分用來儲存區域性變數。因此說,區域性變數的是儲存在棧上的,初始值不確定,作用域為當前函式,因為離開當前函式後棧頂指標也要移動,所以這些變數的值可能被覆蓋而變得沒有意義。

全域性變數儲存在全域性區,未初始化的全域性變數(值為0)儲存在bss段,初始化的全域性變數儲存在data段。至於為何要引入bss段,而不是統統存在data段中,是因為bss段只要在程式中說明它的大小就可以了,而data段要記錄整個段的值,所以如果有大量的未初始化的全域性變數,儲存在bss段中可以減少可執行檔案的大小。

概括一下,區域性變數的作用域為宣告部分到語句塊結束,即距離它最近的 之間。而全域性變數的作用域為定義的位置到檔案末尾及其他檔案(需要提供宣告)。再者兩者在記憶體中儲存的位置不同,以此導致兩者的一些性質差異上面已經敘述。

20樓:出家人詞悲

c語言中形參與實參:

形參 form parameter

實參 real parameter

出現在函式定義中的引數,就叫形參

出現在函式呼叫中的引數,就叫實參

函式定義:

int max( int a , int b ) //這裡的a,b就是形參

函式呼叫

int main()

區域性變數與全域性變數的區別:

1)區域性變數只在本函式範圍有效,在此函式以外是不能使用這些變數;全域性變數的有效範圍是從定義變數的位置開始到本原始檔結束。

2)區域性變數是程式執行到該函式時給該變數分配記憶體空間,函式結束則釋放該記憶體空間;全域性變數是程式執行時事先分配記憶體空間,當程式結束時釋放記憶體。

c語言關於實參形參表示的方式的問題

1,形參前面加了void是空函式 意思是不要求返回值麼?那這題不是把宣告部分全部返還了麼?增加void表示不用返回值,即在函式中要使用return時,不用帶值。比如返回值為int型,那麼要用類似return 0 而本例直接return 即可。void inv int x int n 中x,n都是傳入...

C語言為什麼輸出的是7 0啊,C語言 7 0,為什麼

字元 hex dec 0 0x00 0 從數值上說上面三個是相等的 0 0x30 48 請lz注意他們的區別 你可以這樣理解strlen 函式的實現 int strlen char str 定義的x是字元型陣列名,但在c語言中字元型變數可以被賦予整形資料,字串裡遇到結束符0 0 就會結束,不管後面是...

這道C語言的答案為什麼是這樣,看一道C語言程式答案,為什麼會這樣?

1 能整除形參x且不是偶數的各整數 是說求 各整數 這個 各整數 滿足兩個特徵 能整除形參x 不是偶數 這兩個特徵寫成 就是 x i 0 i 2 2 這些除數的個數通過形參n返回 是通過形參返回,而不是返回值返回。如果用return就 是函式的返回值。形參是n,兩條語句 n 0 和 n 即為將形參n...