函数参数传递

来源:互联网 发布:猫咪qq群淘宝客软件 编辑:程序博客网 时间:2024/06/05 10:00
/*
直接粘贴到编译器看。
函数参数的操作实际就是堆栈操作:
函数名也是个地址,它把参数一个一个压入栈中,返回时再一个一个
弹出栈中,这也就是为什么函数返回后函数中的数据不可用的原因。
函数的参数是怎么分配的:
一个参数在栈中有一个地址,如果是值传递这个地址的值就是实参
的值,如果是址传递,这个地址的值就是实参的地址
函数参数传递分为址传递和值传递
址传递---把实参的地址传递到函数中,这样在函数里做的操作就是对实参
原形的操作.
值传递---把实参的值传递到函数中,因为函数的参数做的是堆栈操作,所以
只在函数内有效,这也就是作用域。
如果有什么地方错误或要补充请和我联系谢谢!欢迎和我交流。
Email: dskra@163.net || dskra@hotmail.com
QQ: 14300585
网名: dskra 绿青虫
*/
//void get(int o);
void get(int &o);
//void get(int o[]);
//void get(int *o);
void get(int **o);
void get(int *&o);
void main()
{
int a=4;
// get(a); //传递变量,传的是变量里的值,是值传递
int &e=a;
get(e);
int b[]={1,2,3};//a就是指向数组首地址,可象指针一样操作
// get(b); //传递数组,传的是数组的首地址,是址传递
int *c=b;
// get(c); //传递指针,传的是指针的值(b),是值传递
//和get(b)函数功能一样,所以只能选其一

get(&c); //传递指针,传的是指针的地址,是址传递
int *&d=c; //就相当于int *c=b,c用&d来代替,因为d是c的引用的指针


get(d); //传递引用的指针,传的是引用指针的值(b),是值传递
//和get(c)功能一样,所以只能选其一
}
/*
void get(int o)
{
o=1; //操作只在函数中有效
}
*/
void get(int &o)
{
o=2;
}
/*
void get(int o[])
{
o[0]=5; //操作对实参有效
}
*/
/*
void get(int*o)
{
*(o+1)=6; //操作对实参无效,但可改变实参的值
}
*/
void get(int **o)
{
*(*o+1)=7; //操作对实参有效,可改变实参的值
}
void get(int *&o)
{
*(o+1)=9; //操作对实参无效,但可改变实参的值}(完)计算机基础教程网
原创粉丝点击