C中的指针(将地址传递给函数)
我正试图解决这个问题。 问题是,*“swap_nums似乎有效,但不是swap_pointers。修复它。”*顺便说一下,我是初学者:)
我相信我可以自己解决这个问题,但问题是我在理解C中的一些编程概念时遇到了一些困难。这里我展示了需要编辑的给定代码。 到目前为止,我将展示我的思维过程。 请注意:我想要一些提示,而不是完整的解决方案。 🙂
#include #include 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; }
我的思考过程:这是一个我认为应该交换整数变量a和b的程序。 然后它将采用两个声明的字符串并交换它们。
主function:
int a = 3, b = 4;
将变量a和b分别分配给3和4。
char *s1, *s2;
创建一个字符指针变量(它将保存一个字符的地址)
swap_nums(&a, &b);
函数swap_nums正在发生。 我现在就去解释我的思维过程。
void swap_nums(int *x, int *y){
所以我不熟悉将事情传递给函数,如果我在这里错了,有人可以纠正我要说的话吗?
我看到它的方式,我们将&符号指示的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; }
这是一个提示,这有一些问题:
s1 = "I should print second"; s2 = "I should print first";
什么是s1
的类型,什么是“我应该打印第二”? 如何将字符串文字保存到变量?
指针可以是一个地址,但它仍然通过值传递给函数(就像C中的所有内容)。 要交换两个指针, 您需要指针指针 。
这是你想要的:
#include 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; }
提示:按价值研究呼叫并通过引用呼叫以清楚地了解您的查询。
将指针视为另一个变量,我们必须将指向此变量的指针传递给函数swap_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; }
希望这可以帮助。