为什么在通过引用传递时只添加2?

时间:2017-12-05 17:55:25

标签: c pointers struct

为什么只有当它通过引用传递时,年龄值的变化?为什么在通过值传递时不起作用?

    #include<stdio.h>
struct employee{
char name[20];
int age;
};
void modify_byVal(struct employee v){
    v.age=v.age+2;
    }
    void modify_byRef(struct employee *p){
 p ->age=p->age+2;
 }
 void main(){
     struct employee Sam = {"Sam", 35};
     struct employee Mary = {"Mary", 25};
     modify_byVal(Sam);
     modify_byRef(&Mary);
     printf("%s %d", Sam.name, Sam.age);
     printf(" ");
     printf("%s %d", Mary.name, Mary.age);
     }

Output of code

2 个答案:

答案 0 :(得分:2)

因为您在传递值时所做的更改是在传递的变量的副本上。这与 html5-video-container { background-position: center; background-repeat: no-repeat; width: 100%; height: 100%; left: 0px; top: 0px; position: absolute; } video.video-stream.html5-main-video { background-position: center; background-repeat: no-repeat; width: 100%; height: 100%; left: 0px; top: 0px; position: absolute; } 中的变量完全无关。

在第二种情况下,当您将地址作为值传递时,您取消引用它并对该地址的变量进行了更改。这就是改变保留的原因。

C 中没有通过引用传递。

答案 1 :(得分:0)

按值传递:将传递变量副本,对该副本进行更改而不是实际变量
按地址传递:地址在函数内部传递,因此对存储在该地址的变量进行更改