如何增加作为参数传递给C中函数的变量的值



我有一个main函数,它包含变量int xint y。我正在调用void函数task,指针int *p1int *p2中的xy地址是函数task的参数。

然后,我尝试增加*p1*p2中包含的值,尝试更改变量xy的值,因为我正在增加变量内部的值。

#include <stdio.h>
void task(int *p1, int *p2)
{
*p1++;
*p2++;
printf("%dn", *p1);
printf("%dn", *p2);
}
int main()
{
int x = 10;
int y = 100;
task(&x, &y);
printf("%dn", y);
printf("%dn", x);
}

但价值观是不变的。是否可以更改变量xy的值?

更改:

*p1++;
*p2++;

(*p1)++;
(*p2)++;

在第一种情况下,指针变量p1p2是递增的,而不是它们所指向的值

使用括号可以清楚地表明,要增加的是值,而不是指针本身。

请使用

(*p1)++;
(*p2)++;

现在的顺序不同了。如果将task()修改为以下,将更清楚地解释

void task(int *p1, int *p2)
{
printf("%p %dn",p1, *p1);
printf("%p %dn",p2, *p2);
*p1++;
*p2++;
printf("%p %dn",p1, *p1);
printf("%p %dn",p2, *p2);
}

尝试检查指针地址&价值,你会发现你错过了什么。

在这里,当您尝试*p1++时,您只是在增加地址。这里首先是p1++,它只是增加了你的地址,然后试图用*p1从地址中读取值。这就是为什么它不能打印期望的值。

只需添加括号。

这是代码:

#include <stdio.h>
void task(int *p1, int *p2)
{
(*p1)++;
(*p2)++;
printf("%dn", *p1);
printf("%dn", *p2);
}
int main()
{
int x = 10;
int y = 100;
task(&x, &y);
printf("%dn", y);
printf("%dn", x);
return 0;
}

最新更新