C中的指针(将地址传递给函数)

C中的指针(将地址传递给函数),c,pointers,C,Pointers,我正在设法解决这个问题。问题是,*“swap\u nums似乎有效,但不是swap\u指针。修复它。”*顺便说一下,我是个初学者:) 我相信我自己可以解决这个问题,但问题是我在理解C语言中的一些编程概念时有点困难。这里我展示了需要编辑的给定代码。下面我将展示到目前为止我的思维过程。请注意:我想要一些提示,而不是完整的解决方案,请::-) 将变量a和b分别赋给3和4 char *s1, *s2; 创建字符指针变量(将保存字符的地址) 正在进行功能交换。我现在就来解释我的思维过程 void swa

我正在设法解决这个问题。问题是,*“swap\u nums似乎有效,但不是swap\u指针。修复它。”*顺便说一下,我是个初学者:)

我相信我自己可以解决这个问题,但问题是我在理解C语言中的一些编程概念时有点困难。这里我展示了需要编辑的给定代码。下面我将展示到目前为止我的思维过程。请注意:我想要一些提示,而不是完整的解决方案,请::-)

将变量a和b分别赋给3和4

char *s1, *s2;
创建字符指针变量(将保存字符的地址)

正在进行功能交换。我现在就来解释我的思维过程

void swap_nums(int *x, int *y){
所以我不太熟悉将东西传递到函数中,如果我在这里错了,有人能纠正我要说的吗


在我看来,我们正在将a和b的地址传递到函数swap_nums中,如符号and所示。但是为什么我们有int*x和int*y?我有点困惑。有人能给我解释一下这一点吗?

指针可能是地址,但它仍然是通过值传递给函数的(就像C中的所有东西一样)。要交换两个指针,您需要指向指针的指针


以下是您想要的:

#include <stdio.h>

int main(void)
{
    char x='s';
    char y='o';
    char *a = &x;
    char *b = &y;
    printf("a is %x\n",a);
    printf("b is %x\n",b);
    printf("swapping\n");
    swap_pointers(&a,&b);
    printf("a is %x\n",a);
    printf("b is %x\n",b);

}

void swap_pointers(char **a, char **b)
{
    char *temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
#包括
内部主(空)
{
char x='s';
chary='o';
字符*a=&x;
char*b=&y;
printf(“a是%x\n”,a);
printf(“b是%x\n”,b);
printf(“交换”);
交换指针(&a和&b);
printf(“a是%x\n”,a);
printf(“b是%x\n”,b);
}
无效交换指针(字符**a、字符**b)
{
字符*温度;
温度=*a;
*a=*b;
*b=温度;
}

这里有一个提示,这有点问题:

s1 = "I should print second";
s2 = "I should print first";

什么是
s1
的类型,什么是“我应该第二次打印”?如何将字符串文本保存到变量?

在C中,所有内容都作为值传递,包括指针。因此,交换指针的代码会操纵指针副本,而保持原稿不变

为了交换指针,您需要将指针传递给指针,而不仅仅是指针。当然,在函数内部,您需要添加一个级别的解引用,方法与在
交换编号中所做的相同:

void swap_pointers (char **x, char **y) {
    char *temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

提示:研究“按值调用”和“按引用调用”,以明确理解您的查询。

将指针视为另一个变量,我们必须将指向此变量的指针传递给函数
swap\u pointers()

,我想这就是您需要的。基本和充分

void swap(char **s1, char **s2){
char *temp=*s1;
*s1=*s2;
*s2=temp;
}

int main(){
char *s1="second";
char *s2="first";
swap(&s1,&s2);
printf("%s",s1);
printf("%s",s2);
return 0;

}  

希望这有帮助。

绝对正确。如果你想变得有趣,你也可以用异或交换它们;)<代码>{if(x!=y){*x=*x^*y;*y=*x^*y;*x=*x^*y;}}}
s1 = "I should print second";
s2 = "I should print first";
void swap_pointers (char **x, char **y) {
    char *temp;
    temp = *x;
    *x = *y;
    *y = temp;
}
void swap(char **s1, char **s2){
char *temp=*s1;
*s1=*s2;
*s2=temp;
}

int main(){
char *s1="second";
char *s2="first";
swap(&s1,&s2);
printf("%s",s1);
printf("%s",s2);
return 0;

}