用指针改变变量的值?

时间:2013-11-25 14:56:09

标签: c

我是指针新手,我正在尝试创建一个函数,将变量 a 的值更改为变量 b ,变量值 b < / strong>变量 a

我认为除了功能外,我的一切都很正确。在函数中我试图使指针 a * a )的值并将其分配给值指针 b 具有,并且副verca。但是我的输出是“a现在是y而b现在是y”。

这是因为当我将 * a 分配给 b 时, b 会获得 * a 的值刚改成 y

#include <stdio.h>

void change(char* a, char* b)
{
    *a = b;
    *b = a;
}

int main(void)
{

    char a = 'x';
    char b = 'y';


    printf("a is now %c and b is now %c\n", a, b); 

    change(&a, &b);

    printf("a is now %c and b is now %c\n", a, b); 

    return 0;
}

2 个答案:

答案 0 :(得分:6)

您的change功能错误:

void change(char* a, char* b)
{
    char temp = *a;
    *a = *b;
    *b = temp;
}

首先创建一个临时变量 - 将其复制到临时变量中,然后交换该值。这一行是UB:

*a = b;
*b = a;

您正试图将指针的值存储在char中。

答案 1 :(得分:0)

是的,您的第一个作业会覆盖第二个作业所需的值。

解决方案是在交换期间使用一些临时存储来保存其中一个变量值:

void change(char *a, char *b)
{
  const char old_a = *a;
  *a = *b;
  *b = old_a;
}

还有一个技巧可以解决这个问题(使用按位异或),但这很可怕所以忽略它。