C 用指针更改变量的值?
我是指针新手,我正在尝试创建一个函数,将变量a的值更改为变量b,将变量b的值更改为变量a 我想除了功能外,我什么都做对了。在函数中,我试图将指针a(*a)的值赋值给指针b的值,反之亦然。然而,我的输出是“a现在是y,b现在是y” 这是因为当我将*a分配给b时,b将得到*a的值,该值刚刚更改为yC 用指针更改变量的值?,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) {
#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-欢迎:)