1. 程式人生 > >C語言---傳值與傳地址

C語言---傳值與傳地址

<1>傳值:實參把值傳給了形參,但沒有傳地址即對實參的修改無效。

核心原理:函式會對形參和中間的臨時變數(函式內定義的變數)重新分配空間。

<2>傳地址:實參把自己的記憶體地址傳給了形參,這樣對實參的修改就有效了。

大多數型別都是傳值,

傳地址有以下3種方式:

(1)、全域性變數(把引數定義成全域性變數,一次性分配空間,傳地址,函式訪問時無須引數,直接訪問)

(2)、指標是傳值的,但指標的間接引用是傳地址的;

(3)、陣列是傳地址的,因為陣列對記憶體要求比較苛刻,系統對陣列作引數,不再分配空間,傳地址。


#include<iostream.h>
void swap1(int a,int b)
{
int c=a;
a=b;
b=c;
}
void swap2(int &a,int &b)
{
int c=a;
a=b;
b=c;
}
void swap3(int *,int *) ; //隱藏不行 先定義後使用
void swap4(int *,int *) ;
#pragma argsused
int main(int argc, char* argv[])
{
int x=10,y=20;
cout<<”x=”<<x<<”   y= “<<y<<endl;
swap1(x,y);
cout<<”x=”<<x<<”   y= “<<y<<endl;
swap2(x,y);
cout<<”x=”<<x<<”   y= “<<y<<endl;
swap3(&x,&y);
cout<<”x=”<<x<<”   y= “<<y<<endl;
swap4(&x,&y);
cout<<”x=”<<x<<”   y= “<<y<<endl;
cin.get();
}

void swap3(int *a,int *b)
{
int *c=a;
a=b;
b=c;
}
void swap4(int *a,int *b)
{
int *c=a;
*a=*b;
*b=*c;

}