【问题标题】:My array isn't printing the actual values [duplicate]我的数组没有打印实际值[重复]
【发布时间】:2020-04-30 09:24:40
【问题描述】:

我有一个简单的程序,它应该向用户询问 10 个整数并将它们打印出来,但它不是打印整数,而是打印一个随机的 7 位数字,每个新整数增加 4。

#include <stdio.h>

int main(int argc, char *argv[])
{
    int number = 0;
    int numbers[10];

    for (int i = 0; i < 10; i++)
    {
        printf("Please enter 10 numbers: ");
        scanf_s("%d", &number);
        numbers[i] = &number;

        printf("Your number was %d\n", &numbers[i]);

    }

}

程序最终会执行以下操作:

Please enter 10 numbers: 1

Your number was 5241560

Please enter 10 numbers: 2

Your number was 5241564

Please enter 10 numbers: 3

Your number was 5241568

以此类推,每次使用不同的 7 位数字,但总是增加 4。

【问题讨论】:

标签: c printf scanf


【解决方案1】:

在这种情况下,您可能认为随机的数字毕竟不是随机的!它们实际上是数组元素的地址。为什么? 好吧,因为在您的 printf 中,您打印出 &amp;numbers[i]。放置“&”符号意味着访问某个值的地址,而不是访问该值本身。 因此,如果您有兴趣打印数组元素而不是数组元素的地址,那么您应该从 printf 语句中删除“&”。

另外numbers[i] = &amp;number; 表示“将变量number 的地址分配给数组的第i 个元素。如果访问地址不是您真正想要的,您应该删除不必要的'&' 符号。

这里有一些关于 C 中地址的很好的参考: Pointers in C, 5 Minute guide to C pointers

【讨论】:

    【解决方案2】:

    您不必要地使用&amp;。替换

     numbers[i] = &number;
    

    numbers[i] = number;
    

    printf("Your number was %d\n", &numbers[i]);
    

    printf("Your number was %d\n", numbers[i]);
    

    你也不要使用int argc, char *argv[]参数所以替换

    int main(int argc, char *argv[])
    

    int main(void)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多