c語言函式的形參問題,C語言函式的形參問題

2022-02-07 15:18:21 字數 1542 閱讀 9441

1樓:侃史小吏

值傳遞是單向傳遞。只能由實參傳給形參。而陣列傳遞的是陣列的首位址。不是變數的值。兩個陣列共占同一段記憶體單元。所以。。。。。

2樓:

傳遞值得時候形參和實參不共用單元格,但是傳位址的時候他們共用乙個單元格!~

3樓:匿名使用者

形參傳遞的是值,引數並且參與計算時,並沒有呼叫修改該引數,而是先把引數的值複製到記憶體的另乙個地方,修改的是複製後的那個位址所對應的值,故原值不變。。而陣列a中,a其實質就是指標,指向的是該陣列第乙個成員,參與計算時,相當於修改了實參,所以值會變得/

4樓:匿名使用者

首先要知道,引數傳遞是要壓棧的

簡單示意說明下

如 void test (int y)

這樣操作的

void test(int y)

意思是說函式中執行的實話,已經不是傳入的引數了,而是乙個副本只修改了副本,y沒有改變

而傳指標

void test (int *y)

改_y位址的內容即是改y位址的內容

5樓:匿名使用者

引數傳遞中有些傳的是值,有些傳遞的是位址,陣列的話是傳遞的位址。

6樓:匿名使用者

因為陣列是不定長的,這導致沒法向函式正確傳遞陣列。

所以,如果是傳陣列的話,統一的只是傳遞陣列首位址,也就是指標,子函式裡通過該指標找到陣列裡的資料,所以修改裡面的數就是修改了原來的數。記住,陣列引數是傳指標來實現的

而一般引數則是直接把資料入棧,相當於把資料作了乙份拷貝,把拷貝傳給了子函式

7樓:若影蝸牛

形參.在c中有兩種傳遞方式:數值傳遞和指標傳遞數值傳遞,就是你說的第一種情況,使用的是原資料的拷貝,而非原資料,乙個簡單的例子:

void swap( int a , int b)在其他函式中呼叫swap(x,y).是不會交換x,y的值的指標傳遞:就是你說的第二種,陣列名是指標型別的..

學到後面你會明白,指標儲存的是資料的位址,你可以這麼理解,通過這個位址,可以找到實際的資料,對這塊位址進行間訪操作就可以操作實際的資料

void swap( int *a , int *b)呼叫swap(&x,&y) 可以交換x,y的值

8樓:匿名使用者

int clear(list *&l);中

list *&l 是乙個指標引用, c語言中沒有引用的概念。這是c++的語法。

1) int clear(list *l); 傳入指標,能保留函式對l指向的記憶體所做的修改。指標l本身不會被改變,它仍指向同一塊記憶體。

2) int clear(list *&l); 傳入指標引用,能保留函式對l指向的記憶體所做的修改。與1)不同的是,指標本身也可以保留函式對它的改變,而去指向另一片記憶體

3) int clear(list l); 傳入結構變數的乙個副本,所以,函式對引數l所做的修改,在函式退出後不會被保留。 l不會被改變。

另外,團idc網上有許多產品**,便宜有口碑

C語言新手這道程式,函式呼叫,實參形參

給你寫了注釋,看看能否看懂,不懂可追問 include void fun double sn,int n int main void 均不計行數 行長不計行首tab縮排 printf ns 1 1 1 2 1 d 16f n,sum return 0 void fun double sn,int n...

c語言程式設計函式呼叫問題,C語言程式設計函式呼叫問題

char in if in yi 錯了。char in 只能容納 1 個 ascii 符號。改 char in 4 printf 解方程應用 n n您要解的方程是?n printf 一元二次方程 yi n printf 二元一次方程 er n scanf s in 0 if strcmp in,yi...

c語言pow函式,C語言pow函式

丿 pow 函式用來求x的y次冪,x y及函式值都是double型 其原型為 double pow double x,double y 例項 如下 include include void main double x 2,y 10 printf f n pow x,y return 0 擴充套件資料...