當前位置:首頁 » 編程語言 » c語言值傳遞

c語言值傳遞

發布時間: 2022-06-20 15:13:48

c語言值傳遞和地址傳遞 不明白

1)void swap(int a, int b)的參數屬於值傳遞;

2)值傳遞需要一個中間變數,以你的程序為例:

swap(x,y);

它的實際過程是,先分配兩個臨時變數,a和b,這兩個變數和傳入的x、y佔用不同的地址空間,程序先將x和y的值復制給a和b:

swap(a = x, b = y),之後在swap中所有的操作都是針對a和b進行的,與x和y無關,所以x和y的值在swap執行後依然保持不變。

3)地址傳遞也需要一個中間變數,但是這個中間變數保存的是地址,對於C語言你就需要用到指針變數,它可以保存一個普通變數的地址,通過改變這個地址里的內容就可以改變原變數的值。對於你的程序,如果想在調用swap後,x和y的值被改變,你需要定義成下面的樣子:

#include <stdio.h>
void swap(int *,int *);//參數里的*號表示指針
void main()
{
int x=10,y=20;
printf("(1)a=%d y=%d ",x,y);
swap(&x,&y);//x和y按地址傳入
printf("(4)x=%d y=%d ",x,y);//按地址傳入,x和y的值被swap改變
}

void swap(int *pa, int *pb)//函數形參變成指針

{
int t;
printf("(2)a=%d b=%d ",*pa,*pb); //訪問指針的內容需要在指針前加*號
t=*pa;
*pa=*pb;
*pb=t;
printf("(3)a=%d b=%d ",*pa,*pb);
}

}

3)關於指針的詳細內容,由於篇幅有限,請參看C語言資料的相關章節。

Ⅱ C語言:哪些是值傳遞哪些是地址傳遞

C語言沒有真正意義的地址傳遞,即使傳遞指針也只是傳遞的指針的值,
比如這里加入b 的地址是0x ffff;
實際上在point 函數內是產生了另一個名為p的指針, p 指向0x ffff ( 這個p 只是和main函數的p值相同而已,不是同一個。所以傳遞指針其實是傳遞的地址的值,還是值傳遞)
因此p + 3 不會影響main 函數的p, 如果要改變main的p, 必須:
Point(char** p)
{
*p += 3;

}
調用:
*p = b;
Point(&p);
總之,改變指針的值用二級指針(更高一級的指針,即該指針的地址)。

Ⅲ c語言函數的值傳遞

p函數就是個冒泡遞減排序功能。標准函數頭寫法應該是void p(int a[])而不是void p(int a[5]),即使寫成void p(int a[5]),編譯器也是按void p(int a[])解釋而不按void p(int a[5])解釋,而且這里a[]的意思就是定義a是int *型指針。函數p中並沒有改變a,改變的是a指向的目標a[0]~a[4]。所以不知你問的具體是啥意思……

Ⅳ 誰解釋C語言中什麼是值傳遞和地址傳遞

本質上都是值傳遞,因為傳遞的都是數值,地址也是用數值表示的。如果從作用上分類,值傳遞傳送的是內存單元中存放的數據,這個數據是接收方要直接使用的,地址傳遞傳送的是內存單元的地址(其實這個地址也是存放在某個內存單元中的),這個數據是給接收方間接使用的,因為它指向另一個內存單元,而這個被指向單元里的數據才是最終需要的。比方一下你就明白了:有兩個抽屜AB,A和B中都有你要的東西,但抽屜在我這里,我把A裡面的東西直接給你就是值傳遞,我把B的鑰匙給你就是地址傳遞。

Ⅳ C語言中,數組做函數參數如何才能按值傳遞

傳數組給一個函數,數組類型自動轉換為指針類型,因而傳的實際是地址。

void func(int array[10])
void func(int array[])
void func(int *array)

所以以上三種函數聲明完全等同。

實際情況是,數組做參數,完全無法按值傳遞。這是由C/C++函數的實現機制決定的。

下一個問題是:為什麼偏要按值傳遞呢?當要在一個函數內使用一個數組時,傳一個指針進去不就行了?只要能訪問到我們所要的數據並對其進行操作,何苦鑽牛角尖。

Ⅵ C語言如何把一個函數的返回值傳遞給另一個函數

1、多文件之間,一般很少有單個參數傳遞,那個交集太大,不容易移植,各個文件之間最好是越獨立越好。


2、數據傳遞,一般是通過函數介面來實現的。就是用另一個C文件中的某一個功能的時候,可以通過include它的頭文件,然後直接調用它的介面函數,這樣目的就達到了,這樣實現的好處就是易於移植。

Ⅶ c語言中的值傳遞是怎麼回事

實參的值傳給了形參,形參可以看著是被調函數中的局部變數被調函數可有返回值也可以沒有有返回值用return返回。例如int fun(int a,int b){ int c; c=a+b; return c;}主函數調用:int a,b,c;a=1,b=2;c=fun(a,b);沒有返回值的函數通常形參都是指針變數,那樣可以直接改變變數的值,例如fun(int *a){ *a=5;}主函數調用int b=1;fun(&b);這里調用fun後,b的值就變為5了而如果你的函數是fun(int a)這樣b的值是不會變化的,這要你去理解指針

Ⅷ 在C語言中,函數實參與形參之間的數據傳遞方式是( )傳遞方式。

函數實參與形參之間的數據傳遞方式是( 值傳遞)傳遞方式,在C語言中,數據傳遞方式有值傳遞和引用傳遞,值傳遞:傳值,實際是把實參的值賦值給行參,相當於。

那麼對行參的修改,不會影響實參的值 。引用傳遞: 實際是傳值的一種特殊方式,只是他傳遞的是地址,不是普通的賦值,那麼傳地址以後,實參和行參都指向同一個對象,因此對形參的修改會影響到實參。

(8)c語言值傳遞擴展閱讀

傳值調用中,只使用了實參的值。傳值調用機制里,形參是一個局部變數,其初始值為相應實參的值。在引用調用機制里,將實參的地址傳遞給形參,從表面上看是以實參變數取代形參,因此任何發生在形參上的改變實際上都發生在實參變數上。

引用傳遞是將變數的內存地址傳遞給方法,方法操作變數時會找到保存在該地址的變數,對其進行操作。會對原變數造成影響。可以將一個變數通過引用傳遞給函數,這樣該函數就可以修改其參數的值。

Ⅸ C語言中參數傳遞有什麼特點

C語言中參數傳遞 分類及特點:
1、值傳遞: 在函數調用時,發生的數據傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。
2、地址傳遞:可以實現地址互換。

3、引用傳遞:與地址傳遞一樣,可以實現地址互換,但該傳遞僅適用於C++語言。

Ⅹ c語言函數調用時,參數是如何傳遞的

建立中間變數(形參),把實參值賦值給中間變數,當被調函數返回值時,系統釋放掉中間變數。

在程序中通過對函數的調用來執行函數體,其過程與其它語言的子程序調用相似。對無參函數調用時則無實際參數表。實際參數表中的參數可以是常數、變數或其它構造類型數據及表達式。各實參之間用逗號分隔。

函數作為表達式中的一項出現在表達式中,以函數返回值參與表達式的運算。這種方式要求函數是有返回值的。例如:z=max(x,y)是一個賦值表達式,把max的返回值賦予變數z。



(10)c語言值傳遞擴展閱讀:

C語言中又規定在以下幾種情況時可以省去主調函數中對被調函數的函數說明。

1、如果被調函數的返回值是整型或字元型時,可以不對被調函數作說明,而直接調用。這時系統將自動對被調函數返回值按整型處理。例8.2的主函數中未對函數s作說明而直接調用即屬此種情形。

2、當被調函數的函數定義出現在主調函數之前時,在主調函數中也可以不對被調函數再作說明而直接調用。例如例8.1中,函數max的定義放在main 函數之前,因此可在main函數中省去對max函數的函數說明int max(int a,int b)。

3、如在所有函數定義之前,在函數外預先說明了各個函數的類型,則在以後的各主調函數中,可不再對被調函數作說明。

熱點內容
java軟體免費下載 發布:2025-03-20 10:26:01 瀏覽:705
安卓用什麼編譯 發布:2025-03-20 10:25:57 瀏覽:808
ftp中文軟體下載 發布:2025-03-20 10:07:47 瀏覽:508
nexus7android 發布:2025-03-20 10:06:58 瀏覽:619
安舍iq8如何修改密碼 發布:2025-03-20 10:06:17 瀏覽:880
解壓RTP 發布:2025-03-20 09:59:37 瀏覽:161
python量化分析 發布:2025-03-20 09:53:05 瀏覽:626
手機熱點有限的訪問許可權 發布:2025-03-20 09:50:46 瀏覽:440
為什麼安卓沒有ios系統流暢 發布:2025-03-20 09:50:43 瀏覽:793
python編程實例 發布:2025-03-20 09:48:19 瀏覽:294