【问题标题】:Incrementing integer in a function in C [duplicate]在C中的函数中递增整数[重复]
【发布时间】:2014-10-19 01:27:31
【问题描述】:

我有这个非常简单的程序

int test(int asdf){
  asdf = asdf + 1;
  return 0;
}

int main ( int argc, char **argv ){

  int a = 1;
  test(a);
  printf("a is %d\n", a);
}

我希望程序输出 2,但它却输出 1。出了什么问题?我应该如何通过参考?

【问题讨论】:

  • @RaymondChen:当心,这个问题的公认答案是无稽之谈。
  • @Keith:不,这很好,可以解决一个非常不同的问题(如何与回调函数共享对象?)。它根本不是重复的。
  • 老鼠。我是从this question 那里得到的,这与问题更接近。
  • 投票结束是可以的(因为它已经被回答了)但是为什么所有这些反对意见只是指向重复的主题?
  • @Raymond:是的,那个是很好的复制品。它没有所有类型擦除包袱,只是将结果从函数传输到调用者。

标签: c


【解决方案1】:

首先从优秀的 C 书籍中的指针章节开始

int test(int* asdf){   // Argument will be pointer to integer
  *asdf = *asdf + 1;   // de-reference and access asdf's content & increment
  return 0;
}

test(&a); // Pass address of a

【讨论】:

  • 这对学生没有帮助,因为它甚至没有尝试解释这些概念。
【解决方案2】:

无论你传递什么都会被复制...所以你应该传递一些东西,即使被复制,也能让你找到原始的a

那个东西是一个指针,它的值是a的地址。

如果你把朋友的地址写在一张纸上,那么无论这张纸被复印多少次,拿着它的人仍然可以找到原来的房子。

你写一个指针为int* asdfa的地址写为&a。有指针时要查找对象,需要*asdf

【讨论】:

    【解决方案3】:

    C 不支持通过引用传递变量,所以你不能这样做。

    但是,如果您确实传递了一个指向变量的指针,那么您可以让变量递增。

    看看:

    Passing by reference in C

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 2011-02-07
      • 2016-02-29
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 2015-09-06
      • 1970-01-01
      相关资源
      最近更新 更多