【发布时间】:2021-11-05 09:16:15
【问题描述】:
#include <stdio.h>
void swap1(int a, int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
return;
}
int main()
{
int x = 1, y = 2;
swap1(x,y);
printf("%d %d",x,y);
return 0;
}
我不明白为什么没有指针这些将无法工作,但使用指针它会正常工作。我在谷歌上搜索过它,看到了一些关于它的问题,但在阅读了所有答案后我仍然不明白。
但是这段代码在不使用指针的情况下可以正常工作
#include <stdio.h>
int padovan(int n);
int main()
{
int n;
printf("Enter number : ");
scanf("%d",&n);
printf("Result : %d",padovan(n));
}
int padovan(int x)
{
if(x == 0 || x == 1 || x == 2)
return 1;
else if(x > 2)
return padovan(x-2) + padovan(x-3);
}
【问题讨论】:
-
参数由 value 传递。这意味着当您调用
swap1时,x和y的值将复制 到局部参数变量a和b中。对a和b的任何修改只发生在那些局部变量上,main函数中的原始x和y变量保持不变。 -
padovan为什么起作用,是因为它使用变量x中传递的值来计算一个值,然后返回。它不会尝试修改参数本身。 -
这是我的理解,如果我错了,请纠正我。我的理解是,它通过复制值而不是使 x = a , y = b 将 x 和 y 的值(1 和 2)传递到 a 和 b 中,因此在 swap1 中发生的任何事情都不会在 int main 中发生,而是在第二个代码可以工作,因为它没有打印 x 而是打印 padovan 本身?
-
“我在谷歌上搜索过它并看到了一些问题”不要那样做。阅读 C 编程书中有关函数的章节。您无法通过各种零散的互联网资源学习C,您需要首先通过常规学习来学习语言的基础部分。这意味着读书和/或上课。
-
@WWoPPoWW 那么他们需要被解雇。通过值或指针传递参数是非常基本的东西 - 递归函数是语言的一个奇异的危险细节,几乎没有价值。它不应该在(所有)初学者课程中教授,当然也不应该在学生熟悉如何使用普通函数之前教授。