程序指针不起作用

时间:2014-03-17 09:45:50

标签: c pointers

我正在学习如何使用指针,我做了一个简单的练习,但不幸的是它不起作用如果你帮我解决它我会很高兴。

练习 - 只是得到一个值并将其发送给函数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;
}

非常感谢你非常感谢的帮助

4 个答案:

答案 0 :(得分:3)

您的函数调用错误。它应该像

incNum(p);  

在您的函数中,将*p++更改为(*p)++,将number的值增加1

答案 1 :(得分:2)

查看the precedence table

*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)++;