函数参数传递的问题

来源:互联网 发布:mysql 修改字段默认值 编辑:程序博客网 时间:2024/05/21 20:26
函数参数传递的问题只需记信一点:传递的永远是参数的副本

例1:
void change(int a,int b){    int temp = a;    a = b;    b = temp;}int main(){    int a=10,b=20;    printf("a=%d,b=%d\n",a,b);    change(a,b);    printf("a=%d,b=%d\n",a,b);    return 0;}


change函数中传入的是a,b的副本a',b',改变的是a',b',而a和b并没有改变
--------------------------------------------------------------------------------------------------
例2:
void change(int* a,int *b){    int *temp;    temp = a;    a = b;    b = temp;}int main(){    int a=10,b=20;    printf("a=%d,b=%d\n",a,b);    change(&a,&b);    printf("a=%d,b=%d\n",a,b);    return 0;}

change函数中传入的是指针a和指针b的副本,函数改变是指针a和指针b的副本,指针a和指针b是没有变的
------------------------------------------------------------------------------------------------
例3:
void change(int* a,int *b){    int temp;    temp = *a;    *a = *b;    *b = temp;}int main(){    int a=10,b=20;    printf("a=%d,b=%d\n",a,b);    change(&a,&b);    printf("a=%d,b=%d\n",a,b);    return 0;}

例3中虽然change函数中传入的也是指针a和指针b的副本,但是在函数中通过指针副本改变了其所指向数据的值。
--------------------------------------------------------------------------------------------------
例4:
struct Node{int x;int y;};void change(Node* a,Node* b){a->x = 100;a->y = 100;b = a;}int main(){Node a,b;a.x = 10;a.y = 10;b.x = 0;b.y = 0;printf("a.x=%d,a.y=%d\n",a.x,a.y);printf("b.x=%d,b.y=%d\n",b.x,b.y);change(&a,&b);printf("a.x=%d,a.y=%d\n",a.x,a.y);printf("b.x=%d,b.y=%d\n",b.x,b.y);}

例4中change函数传入的是结构体指针a和结构体指针b后副本,但是change函数中通过对结构体指针a的副本所指向的内容做了修改,即实际的数据被修改了。而对于结构本b,在change函数的发生的是结构体指针a的副本赋值给了结构体指针b的副本,实际上结构体指针b并没有发生改变,因此最后结构体b的输出没有发生变化。