關於實參向形參傳遞資料的疑惑?

2025-04-01 11:45:29 字數 3825 閱讀 5465

1樓:網友

實參向形參傳遞資料,實際上是將實參的值賦值給形參。函式可以對形參做任何處理,但是當函式返回時,形參被銷燬。

即使實參是傳遞的資料是乙個位址,也是將位址的值複製給形參。函式里面可以對指標簡介訪問,如果沒有限制的話,可以進行讀和寫的操作,這就是為什麼傳遞乙個位址值給函式,可以改變該位址上的數值。所以說,傳遞兩個變數的位址給上述函式,是可以實現兩個數交換的功能的。

言歸正傳,函式point的引數是乙個字元型指標,但是為什麼函式point實現不了你想要的功能呢?

原因是這樣的,實參(陣列b的首位址)傳遞給形參,等於是把b[0]的位址的值賦給了指標變州埋量p(僅僅是擁有了該位址的值),然後函式對指標變數p進行操作,p+=3後,指標變數p的值變成了陣列b中b[3]也就是字元'd'的位址。如果在p+=3;語句後對間接訪問指標p(*p),那麼肯定會是'd'。但是當函式呼叫結束,臨時變數p被銷燬,實際實參的內容仍然沒有發生改變。

這就是為什麼不能改變陣列元素的值的原因。

如果要想改變陣列,可以修改函螞含數point函式:

point(char*p)//其實該函式我的風格會這樣寫。

void point(char*p)

p=*(p+3);

return;

其實傳遞位址能夠改變實參的值,最根本的原因是可以通過 「*指標變數」訪問該位址中存放的變數,如果對該變數沒有限制,即可以悶跡笑對該變數進行寫(即重新賦值)的操作。

希望能夠對你有幫助!如果還有不懂,我會盡量幫你把這個問題弄清楚。

2樓:網友

形參可以理解為一些呼叫鬧消漏方賦值的區域性變數,所以和普通變數型別轉換沒區別橋灶。

自動轉換的原則是不會損失資訊。比如char到int 不會損失,就可以自動轉換,反液爛過來就不行。int float互相轉換的時候都會損失,所以都不行。

3樓:神氣的狗皮膏藥

point只是宴肢螞複製了位址,沒有改變原位址。

試驗飢耐一下point(char &*p),也許晌埋行。

在引數傳遞過程中,對形參和實參的要求是()

4樓:科技王阿卓

在引數傳遞過程中,對形參和實參的要求棗猜缺是()a.實參可以是常量、變數或表示式。

b.函式定義時,形參一直佔用儲存空間。

c.形參和實參型別和個數都可以不同。

d.形兆碧參可凳辯以是常量、變數或表示式。

正確答案:實參可以是常量、變數或表示式。

陣列作為形參和實參之間的值傳遞

5樓:馮老師(必果學院

陣列作為形參只是一種形式,其實和對應的資料型別指標等價。

陣列作為實參傳遞的是位址,並不會傳遞陣列長度資訊。

在形參中宣告陣列的大小並沒有任何意義,編譯器不會解釋這個大小,仍然按照指標來處理它。

形參出現在函式定義中,在整個函式體內都可以使用, 離開該函式則不能使用。

實參出現在主調函式中,進入被調函式後,實參變數也不能使用。

形參和實參的功能是作資料傳送。發生函式呼叫時, 主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。

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

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

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

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

5.當形參和實參不是指標型別時,在該函式執行時,形參和實參是不同的變數,他們在記憶體中位於不同的位置,形參將實參的內容複製乙份,在該函式執行結束的時候形參被釋放,而實參內容不會改變。

而如果函式的引數是指標型別變數,在呼叫該函式的過程中,傳給函式的是實參的位址,在函式體內部使用的也是實參的位址,即使用的就是實參本身。所以在函式體內部可以改變實參的值。

6樓:寂寞而莫我知也

定義乙個接收2維陣列的函式void pre_fect(int [5],int n) 還可以接收復合文字的陣列,void pre_fect((int),6}

7樓:才那

你所說的是值傳遞,而不是指標傳遞。

函式宣告:void fun(int a);

已知b[5]=;

需要傳遞b[2]給函式的話就可以呼叫函式fun(b[2]);

8樓:網友

陣列作函式的引數時,有四種傳輸方法。

比如: 一、void key(uchar x,uchar n)main()

key(a,10);

二、main()

uchar *p;

p=a;key(p,10);

void key(uchar *p,uchar n)三、main()

key(a,10);

四、main()

uchar *p

p=a;key(p,10);

我就知道四種而已,引數之間都是位置進行傳遞的。在傳遞時系統會從右至左計算實參的值然後按照對應位置傳遞給形參,然後執行呼叫函式。並得到結果。

俺只知道這麼多,真是見笑了。自已學的不太精。找高手解答吧。

(1)什麼是函式實參與形參"傳值"和"傳址方法"+?單個變數實參如何實現傳址?

9樓:

1)什麼是函式實參與形參"傳值"和"傳址方法"+?單個變數實參如何實現傳址?

形參和實參自定義函式中有形參和實參這兩種概念,怎麼來理解呢?先來看下面的例子function greetusers(username as string) as string greetusers = welcome, 'usernameend functionsub sayhello() greetusers('a哥')end sub[x] 在定義函式greetuser()的定義中,變數username是乙個形參— 函式完成其工作所需要的乙個資訊。[x] 在下面**中:

greetusers('a哥')我們向函式傳遞了乙個資料」a哥」,這個值就是乙個實參。實參是呼叫函式傳遞給函式的資訊。在greetuser(「a哥」)中,將實參」a哥」傳遞給了函式greetuser(),這個值被儲存在形參username裡。

函式里的形參和實參的結合有兩種方式:按照位址傳值鍵拿byref和按照值傳值byvalbyref (預設模式)通俗點講就是系統直接把實參的位址傳給了形參。由於形參現在和實參共享乙個位址,在函式處理過後,實參的數值會相應的變化。

例如:function trybydefault(i as integer) as integeri = i 1trybydefault = iend functionsub test_function()dim n%n = trybydefault(n) nend sub上面返回3,3 也就是函式處理的過程中:n作為實嫌仔參被預設按byref傳值被函式加1之後,n也發生了改變,因此返回的n值為3byval(傳遞數值)如果使用需要特殊指定byval這種方法可以這麼理解,函式在接到實參之後,複製了乙個副本出來,供函式稿者搭使用。

因此實參的值最終沒有變化。function trybydefault(byval i as integer) as integeri = i 1trybydefault = iend functionsub test_function()dim n%n = trybydefault(n) nend sub

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

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

請舉例說明什麼是實參,什麼是形參

形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。函式呼叫結束返回主調函式後則不能再使用該形參變數。實參可以是常量 變數 表示式 函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先...

幫忙解釋下此程式中形參和實參傳遞過程,是指標的哦,越詳細越好

小弟我來說下,swap i,j 中的 i,j是 實際上的引數 實參,而swap char i,char j 裡的char i,char j是 形式上的脊彎遲引數 形參,執行swap i,j 就是把實參賦值給形參,即 i i,j j.然而再 char temp null temp i i j j te...