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

Bob*_*bby 2 c pointers

我正试图解决这个问题.问题是,*"swap_nums似乎有效,但不是swap_pointers.修复它."*顺便说一下,我是初学者:)

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

#include <stdio.h>
#include <stdlib.h>

void swap_nums(int *x, int *y);
void swap_pointers (char *x, char *y);

int main (int argc, char *argv[]){

   int a = 3, b = 4;
   char *s1, *s2;
   swap_nums(&a, &b);
   printf("a is %d\n", a);
   printf("b is %d\n", b);

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

   swap_pointers(s1, s2);
   printf("s1 is %s\n", s1);
   printf("s2 is %s\n", s2);

   return EXIT_SUCCESS; } 

void swap_nums(int *x, int *y){

   int temp;
   temp = *x;
   *x = *y;
   *y = temp; }

void swap_pointers (char *x, char *y){

   char *temp;
   temp = x;
   x = y;
   y = temp; }
Run Code Online (Sandbox Code Playgroud)

我的思考过程:这是一个我认为应该交换整数变量a和b的程序.然后它将采用两个声明的字符串并交换它们.

主功能:

int a = 3, b = 4;
Run Code Online (Sandbox Code Playgroud)

将变量a和b分别分配给3和4.

char *s1, *s2;
Run Code Online (Sandbox Code Playgroud)

创建一个字符指针变量(它将保存一个字符的地址)

swap_nums(&a, &b);
Run Code Online (Sandbox Code Playgroud)

函数swap_nums正在发生.我现在就去解释我的思维过程.

void swap_nums(int *x, int *y){
Run Code Online (Sandbox Code Playgroud)

所以我不熟悉将事情传递给函数,如果我在这里错了,有人可以纠正我要说的话吗?

我看到它的方式,我们将&符号指示的a和b的地址传递给函数swap_nums.但是为什么我们有int*x和int*y?我在这里有点困惑.有人可以向我解释这一点吗?

das*_*ght 8

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

为了交换指针,你需要将指针传递给指针,而不仅仅是指针.当然,里面的功能,你需要添加的解引用您在做同样的方式级别swap_numbers:

void swap_pointers (char **x, char **y) {
    char *temp;
    temp = *x;
    *x = *y;
    *y = temp;
}
Run Code Online (Sandbox Code Playgroud)