c - 为什么这些交换函数的行为不同?

标签 c pointers swap

#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\n", a, b);
    swap1(a, b);
    printf("%d , %d\n", a, b);
    swap2(&a, &b);
    printf("%d , %d\n", a, b);
    swap3(&a, &b);
    printf("%d , %d\n", a, b);

}

最佳答案

C 具有函数参数的值语义。这意味着所有三个交换变体的 ab 都是各自函数的局部变量。它们是您作为参数传递的值的副本。换句话说:

  • swap1 交换两个局部整型变量的值 - 在函数外部没有可见的效果
  • swap2 交换两个局部变量的值,在本例中是指针, - 相同,没有可见的效果
  • swap3 最终得到了正确的结果,并交换了本地指针变量指向的值。

关于c - 为什么这些交换函数的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4330929/

相关文章:

C++链表遍历和修改

linux - 我如何知道哪个进程正在使用交换?

c - C中字符串中的字母互换

c - 为什么这段代码会出现编译错误?

c++ - 使用指针的 vector 移位

python - 从内存位置的哈希查找中删除列表中的项目?

CSS 图像一次交换一个

从 C 源代码调用 tftp get 命令

c - C语言删除矩阵的零行零列的方法

c - 为什么此代码在 HPUX 上会崩溃?