【问题标题】:Int pointers having weird behavior in C在 C 中具有奇怪行为的 int 指针
【发布时间】:2015-12-01 10:50:39
【问题描述】:
void main(){
  int digits[21]; //this was initialized so that every element is 0 by looping over every element and setting it to 0
  char input[20];
  scanf("%s", input);
  parseDigits(digits, input);
}

void parseDigits(int* digits, char *string){
  char *end = string + strlen(string) -1;
  int i;
  for (i = 0; i < strlen(string) - 1; i++, end--){
    int *digit = digits + i;
    printf("%d", *digit);
    *digit += charToDigit(*end);
    if (*digit >= 10){ //carry one
      *digit -= 10;
      digit++;
      *digit += 1;
    }
  }
}

打印一个过大的整数,而不是预期输出的 0。我不明白,因为

digits + i

应该还在数组的范围内。

【问题讨论】:

  • 你是如何初始化这个数组int digits[21];的?
  • "这是初始化的,所以每个元素都是 0" 这是在哪里完成的?不在您显示的代码中。
  • Mike,cmets 不会神奇地诱导期望的行为发生。您必须实际编写注释所暗示的代码。
  • 什么是charToDigit ??
  • 你写的//这是初始化的,所以每个元素都是0。那是完全错误的。 digits 数组根本没有初始化,所以它包含随机值。

标签: c pointers int dereference


【解决方案1】:

可能还有其他问题,但乍一看您没有正确初始化数组,应该这样做:

int digits[21] = { 0 };

【讨论】:

  • 我通过将每个元素设置为零来循环遍历每个元素,但事实证明我做错了。显然迭代器未设置为 0。感谢您向我展示了一种初始化数组中值的新方法。
  • @MikeTravis 这不是一种“新”方式,这是初始化数组的方式,只有一种。其他一切都是运行时分配。
猜你喜欢
  • 2020-11-28
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多