【发布时间】:2020-11-11 16:53:59
【问题描述】:
我想使用 C 中的函数增加整数的值。
所以我首先编写了一个函数 inc,在其中增加整数 v 的值。然后在主函数中我声明了一个新变量 a 并使用 inc(a) 函数递增。
这是我的代码:
#include<stdio.h>
void inc(int v)
{
v++;
}
int main()
{
int a;
scanf("%d",&a);
inc(a);
printf("%d",a);
return 0;
}
但输出与输入值相同。它没有增加。
即如果我将输入作为 45,我期望值 46 作为输出。但是输出仍然是45。我哪里出错了?有人请解释一下。
所以我做了一些研究,发现使用指针时会出现预期的答案,这是代码
#include<stdio.h>
void inc(int *v) {
(*v)++;
}
int main() {
int a;
scanf("%d", &a);
inc(&a);
printf("%d", a);
return 0;
}
为什么没有指针的方法不正确?
同样在第二种方法中,为什么我们将参数作为地址传递,即 &a。为什么我们不能将它作为一个传递?
我是 C 的新手。所以请帮助我解决我的疑问
【问题讨论】:
-
你需要一本 C 的书。简短的回答:C 是默认的按值传递。如果未指定指针,则
inc中的v只是具有相同值的main中a的副本。也就是说,v++ 会在inc的范围内增加 v,但不会影响其他人。对于指针,(*v)++表示“在 v 指向的地方加一个值”。 -
C 和 C++ 是非常不同(但相似)的语言。我建议您不要尝试同时学习两者。先学一个,当你开始学习另一个时,准备好“忘掉”其中的一部分。
-
您可能想了解将参数传递给函数的方法:按值传递和按引用传递。
-
@RobertSsupportsMonicaCellio 我不认为,因为 OP 似乎完全了解那些与语言无关的概念,只是不知道 C 如何/为什么支持它或不支持它。
标签: c function pointers increment