1樓:安心播音
通俗一點,c語言中,函式呼叫的時候,如果有引數,則無論引數是什麼,都要為引數申請新的空間。
如:int fun(int* p);
,它被呼叫的時候,新申請一個指標 p 。即使你呼叫的時候這樣:
int a = 5; fun(&a);
它也會新申請一個指標變數 p 來存放 a 的地址,直到函式返回,該指標 p 的空間才會被釋放。
說白了,指標也是變數,只不過它的值是地址,而已!
2樓:匿名使用者
是地址呼叫的話,系統不另分配記憶體的。
傳遞的是指標和地址。。
你所說的行參和實參分配在同一地址??
感覺你理解就有點錯誤哦。應該分配的是記憶體,我們在c語言裡都是描寫記憶體分配情況的。
記憶體以單元來記算。
3樓:小昊
如果傳的值為地址的話,那麼函式對地址進行操作,修改的就是實參的值不會有給形參分配地址,所以是同一地址
4樓:
更準確的理解是函式建立一個指向同一地址的指標,從而實現對實參和行參的同步操作。
5樓:匿名使用者
不是的1、實參在定義時就開闢儲存單元,這個儲存單元地址在整個程式中是固定不變的;
2、只有在函式呼叫時才給形參開闢儲存空間,如果是值傳遞,則將實參的值賦給形參,如果是地址傳遞,則為形參開闢一個臨時指標變數,然後把實參的地址傳送給形參
3、函式執行完畢返回主程式時,釋放形參所佔的儲存單元。
6樓:匿名使用者
多看看書吧,上面講的挺詳細的。
7樓:豆豆寶寶我愛你
看行參和實參是什麼了.有指標的話,指標是一個地址,但他儲存的是樹組的首地址.若都是陣列.就為一個地址
在c語言中,用陣列名作為函式呼叫時的實參,實際上傳遞給形參的是____________。
8樓:足壇風行者
首地址。
因為陣列名傳遞的是陣列的地址也就是第一個元素的地址。例如:
a[3]這個陣列,3指個數,a[0]指第一個元素,全部元素指a[0]~a[2];那陣列名a規定的就是首地址。
擴充套件資料
c語言中函式引數傳遞的三種方式:
1、傳值,就是把你的變數的值傳遞給函式的形式引數,實際就是用變數的值來新生成一個形式引數,因而在函式裡對形參的改變不會影響到函式外的變數的值。
2、傳地址,就是傳變數的地址賦給函式裡形式引數的指標,使指標指向真實的變數的地址,因為對指標所指地址的內容的改變能反映到函式外,也就是能改變函式外的變數的值。
3、傳引用,實際是通過指標來實現的,能達到使用的效果如傳址,可是使用方式如傳值。說幾點建議:如果傳值的話,會生成新的物件,花費時間和空間,而在退出函式的時候,又會銷燬該物件,花費時間和空間。
9樓:匿名使用者
實引數組的首地復址。
在用數制組名作函式引數時,不是進行值的傳送,即不是把實引數組的每一個元素的值都賦予形引數組的各個元素。因為實際上形引數組並不存在,編譯系統不為形引數組分配記憶體,陣列名就是陣列的首地址,函式得到一個函式值,即為該字元陣列的首地址。
因此在陣列名作函式引數時所進行的傳送只是地址的傳送,也就是說把實引數組的首地址賦予形引數組名。形引數組名取得該首地址之後,也就等於有了實在的陣列。實際上是形引數組和實引數組為同一陣列,共同擁有一段記憶體空間。
10樓:匿名使用者
陣列名傳遞的是陣列的地址也就是第一個元素的地址 所以選 d
11樓:天雨下凡
選擇d.實引數組的首地址
12樓:匿名使用者
d首地址
~~~~~~~~
13樓:yeara洛
d.實引數組的首地址
c語言規定,呼叫一個函式時,實參變數和形參變數之間的資料傳遞方式是什麼 5
14樓:四舍**入
函式只有兩種傳遞方式:
1、值傳遞,又稱單向傳遞,只能把實引數值傳給形參 ,形參最後的結果不影響實參(形參改變大小 ,實參大小不變)。
2、址傳遞,通過指標,把實參的地址給形參,形參的大小可以影響實參。
15樓:匿名使用者
看到很多都說是值傳遞,本人認為只能由使用者指定傳遞方式。
在c語言中,軌道引數傳遞方式有兩種(其實還有引用傳遞):值傳遞和地址傳遞,也就是說可以值傳遞,也可以地址傳遞。至於到底採取什麼傳遞方式應該得有使用者根據形參型別來指定了。
比如 函式 int f( int *p) 此處接收的只能是地址型別
在主函式中定義變數 a =3; 此時實參a的值為3,很明顯 如果這種採用值傳遞方式呼叫 f(a)肯定不合適,
正確的應該是地址傳遞方式呼叫 f(&a) ,也許有些會說,地址也是值。但c明確的規定,實參的值和實參的地址是有本質區別的
故本人認為 傳遞方式只能由使用者根據 形參來指定傳遞方式。
16樓:
函式只有兩種傳遞方式 一個是值傳遞 一個是址傳遞 址傳遞 是指傳的是地址 也就是說 是以陣列過指標作為引數傳遞 而值傳遞傳的是 數 可以是整形的 也可以是實行的
17樓:匿名使用者
資料傳遞是「值傳遞」,即單向傳遞,只由實參傳遞給形參,而不能由形參傳回來給實參。
18樓:匿名使用者
實參向形參的資料傳遞是「值傳遞」,單向傳遞,只由實參傳給形參,而不能由形參傳回給實參
在c語言中,當形參和實參都為指標時,在函式中傳遞的是地址嗎?
19樓:
是的,指標這玩意兒,就是專門和地址掛鉤的!
20樓:休和宜繁星
這程式是你寫的嗎?
要是你寫的話
你就看下面的三段話
就能找出。
1.比如你定義一個函式void
add(int
a,int
b),這裡的a和b就是形參。
2.當你進行函式呼叫的時候,add(1,
2),這裡的1和2就是實參。
3.形參就是沒有賦值的變數,實參就是有賦值的變數
c語言問題 函式中形參若為指標,則呼叫時對應位置上的實參不能是()
21樓:
不能是 簡單變數,因為 它不是地址。
語法規則而已。
形參若為指標,實參必須是 指標變數,或 陣列名,或 簡單變數的地址。
陣列名 就是陣列的首地址,是地址
簡單變數的地址 是地址
形參若為指標,實參是 指標變數,這是一一對應,天經地義。
關於c語言 在c中呼叫函式時,只能把實參的值傳遞給形參,形參的值不能傳給實參。這句話對嗎?為什麼?
22樓:娛樂小八卦啊
不對,在c語言中,傳值有地址傳值和引數傳值,引數傳值只能將實參傳值給形參,所以a選項正確。c語言中的外部變數是可以在函式之間傳遞資料的。
c語言中的自動變數是預設的變數,實際上是函式中的區域性變數,所以d選項正確。全域性變數一經定義都是需要分配記憶體單元,在程式執行過程中自始至終都會佔用固定的空間,在未知記憶體情況下,最好不要使用全域性變數。
函式呼叫時,值可以雙向傳遞,並沒有限制使用全域性變數還是區域性變數,需要根據程式的邏輯需要進行選擇。
擴充套件資料
c語言引數傳遞:
1、值傳遞
引數傳遞只把變數a的值傳遞給了變數p,此時變數a與變數p是值相同的兩個不同變數,在記憶體不同的兩個地址中,所以對變數p賦值只是修改了變數p的值,並不能修改變數a的值。總結一句話就是:值傳遞不傳遞變數本身,只傳遞變數的值。
2、引用傳遞
與值傳遞不同,func的引數是int &p,表示引用傳遞。如輸出所示,通過引用傳遞,變數a的地址與變數p是相同的,也就是說引用傳遞把a的地址傳給了變數p,所以對變數p進行賦值之後,變數a的值也改變了,因為變數a與變數p實際是同一個變數。
3、指標傳遞
指標傳遞,顧名思義,int *p表明p是一個指標變數,呼叫func(&a)是把變數a的記憶體地址傳遞過去賦值給指標變數p,此時指標變數p的值是變數a的記憶體地址,故可看到輸出p為efbfde2c(變數a的記憶體地址)。
*p是對指標p的值(即變數a的記憶體地址)進行取值,相當於*&a,所以對*p進行賦值也就改變了變數a的值。
23樓:紅色老趙
實參是全域性變數,而形參是區域性變數.並且它們存放的地址也不一樣.
24樓:
不對,除了樓上所說的指標和陣列傳遞,還有一種情況就是引數分為入口引數和出口引數,二者區別在於入口引數在呼叫前必須被賦值,而後者在呼叫後才知道它的值,故出口引數是將形參的值傳給實參。(當然,出口引數一般為指標或陣列之類的)
25樓:炎二公子
比如定義
int f(int b) 這裡的b就是形參在呼叫的時候
我們寫 f(a) 這裡的a是本地變數,呼叫f的時候叫做實參在f(a)後,函式f裡的形參b的值是a賦予的,所以實參的值傳遞給形參這句話是對的
形參的值不能傳給實參這句話在嚴格意義上來說也是對的,比如,你在函式f(int b)裡面寫 b= 1000; 對於實參a來說並沒有任何影響。
但是,如果你的函式定義是指標,那麼函式可以改變指標上儲存的內容,但是不能改變指標本身。如果從這點考慮的話,實參是可以通過形參給改變的
26樓:
不對,你仔細看下書就知道為什麼了
c語言中的函式呼叫
include int fun1 int x,int y,int z int fun2 int x,int y,int z int main void int fun1 int x,int y,int z int fun2 int x,int y,int z 你要使用,你寫的函式求出的值,那就要有個...
C語言中函式呼叫問題
如果一個函式要使用引數,它就必須定義接受引數值的變數。形式引數與實際引數 函式定義時填入的引數我們稱之為形式引數,簡稱形參,它們同函式內部的區域性變數作用相同。形參的定義是在函式名之後和函式開始的花括號之前。呼叫時填入的引數,我們稱之為實際引數,簡稱實參。必須確認所定義的形參與呼叫函式的實際引數型別...
c語言中,函式返回值怎麼用,c語言中呼叫函式如何返回多個值?
斑駁丶4129仉 一般用0表示函式執行正確,正常返回 用負數表示函式執行出錯,每個值可以提前定義,根據出錯的值進行出錯處理。誠心為您解答每一個問題!如您滿意請採納最佳!如有疑問請繼續追問!您的好評是我們前進的動力,相互幫助,一起進步! return後接一個值。在呼叫這個函式的函式裡面,呼叫它的時候希...