/* 直接粘贴到编译器看。
函数参数的操作实际就是堆栈操作: 函数名也是个地址,它把参数一个一个压入栈中,返回时再一个一个 弹出栈中,这也就是为什么函数返回后函数中的数据不可用的原因。 函数的参数是怎么分配的: 一个参数在栈中有一个地址,如果是值传递这个地址的值就是实参 的值,如果是址传递,这个地址的值就是实参的地址 函数参数传递分为址传递和值传递 址传递---把实参的地址传递到函数中,这样在函数里做的操作就是对实参 原形的操作. 值传递---把实参的值传递到函数中,因为函数的参数做的是堆栈操作,所以 只在函数内有效,这也就是作用域。
如果有什么地方错误或要补充请和我联系谢谢!欢迎和我交流。 Email: [email protected] || [email protected] 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; //操作对实参无效,但可改变实参的值 } 
|