Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用指针更改变量的值?_C - Fatal编程技术网

C 用指针更改变量的值?

C 用指针更改变量的值?,c,C,我是指针新手,我正在尝试创建一个函数,将变量a的值更改为变量b,将变量b的值更改为变量a 我想除了功能外,我什么都做对了。在函数中,我试图将指针a(*a)的值赋值给指针b的值,反之亦然。然而,我的输出是“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) {

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

我想除了功能外,我什么都做对了。在函数中,我试图将指针a*a)的值赋值给指针b的值,反之亦然。然而,我的输出是“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;
}
#包括
无效更改(字符*a、字符*b)
{
*a=b;
*b=a;
}
内部主(空)
{
字符a='x';
字符b='y';
printf(“a现在是%c,b现在是%c\n”,a,b);
变化(a和b);
printf(“a现在是%c,b现在是%c\n”,a,b);
返回0;
}

您的
更改
功能错误:

void change(char* a, char* b)
{
    char temp = *a;
    *a = *b;
    *b = temp;
}
首先创建一个临时变量-将其复制到临时变量中,然后交换该值。这一行是UB:

*a = b;
*b = a;

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

您的
更改
函数错误:

void change(char* a, char* b)
{
    char temp = *a;
    *a = *b;
    *b = temp;
}
首先创建一个临时变量-将其复制到临时变量中,然后交换该值。这一行是UB:

*a = b;
*b = a;

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

是的,您的第一个赋值将覆盖第二个赋值中所需的值

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

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

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

是的,第一个赋值覆盖了第二个赋值中需要的值

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

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

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

当你这样做的时候:*a=b你会有a='y'然后*b=a你会有b='y'当你这样做的时候:*a=b你会有a='y'然后*b=a你会有b='y',有趣的是,所有交换函数的例子都使用一个名为
temp
的变量进行临时复制。如果不将该名称添加到该变量,就好像它不起作用一样:D@user3032809-欢迎:)有趣的是,swap函数的所有示例都使用名为
temp
的变量进行临时复制。如果不将该名称添加到该变量,就好像它不起作用一样:D@user3032809-欢迎:)