Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

c - Why do these swap functions behave differently?

#include <stdio.h>

void swap1(int a, int b)
{
    int temp = a;

    a = b;
    b = temp;
}

void swap2(int *a, int *b)
{
    int *temp = a;

    a = b;
    b = temp;
}

void swap3(int *a, int *b)
{
    int temp = *a;

    *a = *b;
    *b = temp;
}

main()
{
    int a = 9, b = 4;

    printf("%d , %d
", a, b);
    swap1(a, b);
    printf("%d , %d
", a, b);
    swap2(&a, &b);
    printf("%d , %d
", a, b);
    swap3(&a, &b);
    printf("%d , %d
", a, b);

}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

C has value semantics for function parameters. This means the a and b for all your three swap variants are local variables of the respective functions. They are copies of the values you pass as arguments. In other words:

  • swap1 exchanges values of two local integer variables - no visible effect outside the function
  • swap2 exchanges values of two local variables, which are pointers in this case, - same, no visible effect
  • swap3 finally gets it right and exchanges the values pointed to by local pointer variables.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...