當前位置:首頁 » 編程語言 » c語言引用型參數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言引用型參數

發布時間: 2022-12-20 06:45:14

c語言形參和實參,傳值調用和引用調用的區別

int a(int x){//這個x就是形參,就是你定義的變數名稱

.........

}


int main(){

int y=5;

a(y);//具體的變數y就是實參

a(z);//z也是實參,就是實實在在的值

}

#include<iostream>
usingnamespacestd;
voidswap(inta,intb)
{
inttemp;
temp=a;
a=b;
b=temp;
}
main()
{
inta=3,b=5;
cout<<"before『swap』:a="<<a<<",b="<<b<<endl;
swap(a,b);
cout<<"after『swap』:a="<<a<<",b="<<b<<endl;
}
這個例子是傳值調用,意思就是形參的改變不會影響實參的值。
你運行一下可知主函數調用了swap函數後a,b的值並沒有發生交換。
原因是,調用swap函數時編譯器為swap(inta,intb)中的形參a,b單獨分配內存空間,並接受主函數傳遞來的值,這塊內存空間和main()函數中的a,b不是同一內存空間。所以在swap(inta,intb)中a,b發生了交換,但main函數中a,b沒發生交換。即主調函數與被調函數的操作對象各不相同,參數僅在調用時由實參向形參傳遞,而不可由形參向實參傳遞。

要使a,b發生交換需要使用傳址調用。程序改為如下:
#include<iostream>
usingnamespacestd;
voidswap(int&a,int&b)
{
inttemp;
temp=a;
a=b;
b=temp;
cout<<"in『swap』:a="<<a<<",b="<<b<<endl;
}
main()
{
inta=3,b=5;
cout<<"before『swap』:a="<<a<<",b="<<b<<endl;

swap(a,b);
cout<<"after『swap』:a="<<a<<",b="<<b<<endl;
}

引用可以看作是一個變數的別名,使用引用時,對於voidswap(inta,intb)編譯器並沒有給形參a,b分配新的內存空間,只是使形參a,b指向了main函數中實參a,b的內存空間,他們共享同一內空間,即把地址給了形參。所以在voidswap(inta,intb)函數中對這塊內存的改變也就改變了實參的值。
除了使用引用,也可以使用指針。

指針方式和引用方式都屬於傳址調用。

② C語言到底支不支持引用傳遞做函數參數

「引用傳遞做函數參數」是C++的特性,C語言不支持。



//C語言要這樣寫:
voidExchg3(Rect*x,Rect*y){/*...*/}

//然後傳遞指針:
Exchg3(&a,&b);

③ c語言中什麼叫引用

引用(reference)是c++對c語言的重要擴充。引用引入了對象的一個同義詞。定義引用的表示方法與定義指針相似,只是用&代替了*,例如: Point pt1(10,10)。

Point &pt2=pt1;,定義了pt2為pt1的引用。通過這樣的定義,pt1和pt2表示同一對象。

需要特別強調的是引用並不產生對象的副本,僅僅是對象的同義詞,引用必須在定義時馬上被初始化,因為它必須是某個東西的同義詞。

循環結構:

循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段演算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do while循環和for循環。

四種循環可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環,因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤。

特別要注意在循環體內應包含趨於結束的語句(即循環變數值的改變),否則就可能成了一個死循環,這是初學者的一個常見錯誤。

④ c語言支持引用型參數嗎例如 int function(int &a)

支持引用傳遞。
而且用引用傳遞比用指針傳遞,程序的可讀性更強一點,建議多用引用傳遞。

⑤ C語言中的值傳參和引用傳參是指什麼

在C語言中其實沒有引用傳參,都是值傳參。即傳遞的都是實參的副本。
如下示例,
//交換兩個參數的值,值傳參
void swap(int x, int y)
{
int temp = x;
x = y;
y = temp;
}

int a = 2, b =1;
swap(a,b); //a,b的值不會改變,因為改變的是實參a,b的副本。
另一個示例:
//所謂的「引用傳參」,交換兩個數值
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = tem;
}

int a =2, b = 1;
swap(&a, &b);//a,b的值改變
其實這里引用傳參,傳遞的也是參數的副本,只是這個副本是變數a,b的地址,所以你在函數swap中你並不能通過參數改變變數a,b的地址,因為它只是一個副本,是值傳遞。但你得到變數的地址,你就可以訪問和改變變數的內容,所以在第二個swap函數中,你可以通過*x和*y來改變實參的值,從而可以達到交換變數a,b值的效果。但這並不是引用傳遞。只是有這樣的說法。推薦你去秒秒學上看看相關的內容,我也是從那上面學來的。

⑥ C語言中如何將二維字元數組作為函數參數引用傳遞

不可能達到目的。因為C語言中沒有引用這類型,C++才有。另,C/C++都不支持傳遞數組,只能傳遞數組的首元素或行指針,所以即使是C++,也只能傳遞數組指針的引用,而不可能傳遞數組的引用,因為數組沒有引用。

⑦ 為什麼在VC++6.0下用C語言調用引用參數如:void Creat(SqList &L)總是提示&出錯

你好:

C 語言環境不提供這樣的引用參數方式,只有 C++ 環境才有。

修改方法其實很簡單:

第一步將參數中的 &L 變為 *L(賦地址調用方式),即 void Creat(Sqlist *L);

第二步將函數體內部的所有 L 變為 *L(L 為地址值,*L 取對應內存單元的內容)。

第三步將主調函數調用部分的變數加入取地址符 &,如 main() 函數體中的 Creat(&L);

引用函數的實質是賦地址調用,將其用賦地址調用的方法實現即可解決問題。

⑧ c語言中參數是什麼概念

函數的參數分為形參和實參兩種。

形參出現在函數定義中,在整個函數體內都可以使用,離開該函數則不能使用。實參出現在主調函數中,進入被調函數後,實參變數也不能使用。

形參和實參的功能是作數據傳送,發生函數調用時,主調函數把實參的值傳送給被調函數的形參從而實現主調函數向被調函數的數據傳送。

舉個例子:

定義一個函數s=f(a,b),功能是將a和b的差賦值給s,那麼,a和b就是這個函數的兩個參數。

(8)c語言引用型參數擴展閱讀:

C語言的參數傳遞方式

方法有3種方式:值傳遞、地址傳遞、引用傳遞

tips:

被調用函數的形參只有函數被調用時才會臨時分配存儲單元,一旦調用結束佔用的內存便會被釋放

值傳遞和地址傳遞,傳遞的都是實參的一個拷貝

C語言中實參和形參之間的數據傳遞是單向的「值傳遞」,單向傳遞,只能由實參傳給形參,反之不行

輸出格式並沒有選擇%p而是選擇了%d,因為十進制的數看起來更直觀。

值傳遞

如果只是傳遞值的話:

#include <stdio.h>

//值傳遞傳值

void swap( int x, int y);

int main()

{

int a=2,b=3;

printf("before:實參為a,b a=%d,地址為%d b=%d,地址為%d ",a,&a,b,&b);

swap(a,b);

printf("after:實參為a,b a=%d,地址為%d b=%d,地址為%d ",a,&a,b,&b);

return 0;

}

void swap(int x,int y)

{

int tmp;

tmp=x;

x=y;

y=tmp;

printf("inside:形參為x,y x=%d,地址為%d y=%d,地址為%d ",x,&x,y,&y);

}

⑨ C語言 帶參數函數的引用調用

#include <stdio.h>

void fun(int * a,int k);

void main()
{
int a[10];
printf("請輸入10個整數:\n");
for(int i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
fun(a,sizeof(a)/sizeof(a[0]));
}

void fun(int a[],int k)//這就是你想要的函數
{
int g0=0,t0=0,e0=0;/*g0就是>0,t0就是小於0,e0就等0*/
for(int i=0;i<k;i++)
{
if(a[i]>0) g0++;
if(a[i]==0) e0++;
if(a[i]<0) t0++;
}
printf("大於0的個數為:%d\n",g0);
printf("小於0的個數為:%d\n",t0);
printf("等於0的個數為:%d\n",e0);
}
/*
說明就和ichenq的差不多,只是ichenq的那個有問題,比如他的if語句里多了幾個";"號,導致無沒通過,另外我用他的函數來測試得不到想要的結果
sizeof(a)/sizeof(a[0])就是數組a的長度*/

⑩ C語言形參和實參,傳值調用和引用調用的區別

形參與實參:
int a(int x){//這個x就是形參,就是你定義的變數名稱
......
}
int main(){
int y=5;
a(y);//具體的變數y就是實參
a(z);//z也是實參,就是實實在在的值
}
傳值調用和引用調用:
二者的區別為,當傳引用時,實際傳到函數中的形參,是實際參數的一個引用,而不是僅傳遞值到函數中。具體的表現有以下幾條:
1、傳引用時,形參和實參是同一個變數,即使用相同的內存空間,二者有相同的地址。而傳值時二者地址不同;
2、傳引用時,由於沒有新建變數,所以對於類對象參數,不會產生構造和析構。而如果是傳值調用,調用時會進行構造,退出函數時會進行析構;
3、由於傳引用使用的是原本實參的地址,所以對引用參數值的修改,會在退出函數後體現在主調函數中,而傳值調用對參數的修改不會影響到主調函數。