我正在学习如何使用指针,我做了一个简单的练习,但不幸的是它不起作用如果你帮我解决它我会很高兴。
练习 - 只是得到一个值并将其发送给函数thet将他提升为一个。
代码 -
#include <stdio.h>
void incNum(int* p)
{
*p++;
}
int main()
{
int number = 20;
int* p;
p = &number;
printf("%d\n",number);
incNum(&p);
printf("%d\n",number);
return 0;
}
非常感谢你非常感谢的帮助
答案 0 :(得分:3)
您的函数调用错误。它应该像
incNum(p);
在您的函数中,将*p++
更改为(*p)++
,将number
的值增加1
。
答案 1 :(得分:2)
*p++
转换为*(p++)
,它会更改指针并返回更改前指向的内容(您要丢弃的内容)。你想要的是相反的,即(*p)++
。
除此之外,您应该调用函数:
incNum(p);
作为旁注,请尝试在启用警告的情况下进行编译(始终执行此操作)。如果您使用的是gcc,则使用-Wall
标志,例如:
gcc -Wall your_file.c
另外,请确保不要忽略这些警告;)
答案 2 :(得分:2)
让我们说:
number 20 | 1024
value | Address
拥有int* p = &number
:
p 1024 | 1000
value | Address
因此:
incNum(&p) ==> incNum(1000)
*p ==> 1024
(*p)++ ==> 1025
这不是您希望传递的值,因此它应该是incNum(p) ==> incNum(1024)
最后,这应该是这样的:
void incNum(int* p)
{
(*p)++;
}
int main(void)
{
int number = 20;
int* p;
p = &number;
printf("%d\n",number);
incNum(p);
printf("%d\n",number);
return 0;
}
答案 3 :(得分:1)
因为你在incNum
函数中传递了错误的参数,你应该通过incNum(p);
或incNum(&number);
。
incNum(&p);
表示您传递了指向数字的指针p
的地址,并且您增加了它的值。
同样*p++;
应为(*p)++;