我正试图解决这个问题.问题是,*"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?我在这里有点困惑.有人可以向我解释这一点吗?
在C中,所有内容都作为值传递,包括指针.因此,交换指针的代码操纵指针副本,保持原始文件不变.
为了交换指针,你需要将指针传递给指针,而不仅仅是指针.当然,里面的功能,你需要添加的解引用您在做同样的方式级别swap_numbers:
void swap_pointers (char **x, char **y) {
char *temp;
temp = *x;
*x = *y;
*y = temp;
}
Run Code Online (Sandbox Code Playgroud)