【问题标题】:Some code of pointer一些指针代码
【发布时间】:2016-03-14 20:08:43
【问题描述】:

代码需要向函数发送一个 int 必须只发送 int 并在函数之后显示更改。所以我尝试了这个:

int main(void)
{
    int number = 0;
    printf("Please enter some number: \n");
    scanf("%d", &number);
    printf("the number that you entered: %d\n", number);
    inc(number);
    printf("After the 'inc' function, your number is: %d\n", number);
    system("PAUSE");    
    return 0;
}
/*
*/
void inc(int x)
{
    int* px = &x;
    *px= *px+1;
}

它只打印相同的数字并且根本不会改变。帮忙?

【问题讨论】:

  • 您需要传递地址并从函数中更改值。
  • 无意冒犯,请重读一本基础C书,请先指点章节。
  • x 里面的inc 是一个副本

标签: c pointers


【解决方案1】:

你必须将参数作为指针传递

void inc(int *px)
{
    *px= *px+1;
}

在您的代码中,您只是在修改 x 的函数本地副本

【讨论】:

  • 它会被称为inc(&number) from main
【解决方案2】:

一个骇人听闻的黑客攻击:

inc((int)&number);

// ...

void inc(int n)
{
    ++*(int*)n;
}

不要这样做。它不适用于除某些古老架构之外的所有架构。

【讨论】:

  • 它不会在任何拱门上工作吗?在哪里可以“安全地”投射整数和指针,(不,我不是在提倡它是因为你说的讨厌的 hackkiness 的原因:)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 2016-12-23
  • 2012-10-14
  • 2021-07-07
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多