【问题标题】:Can i use pointer in scanf to take input in an array?我可以在 scanf 中使用指针在数组中输入吗?
【发布时间】:2013-08-28 06:08:47
【问题描述】:

我正在尝试在 中执行此操作:

scanf("%d",a+i);

其中a 是一个大小为10 的数组。 i 是循环计数器。那么这可能吗?

【问题讨论】:

  • 让我们看看你尝试了什么
  • 另外,如果您专门寻找 C 答案,请不要标记 C++。
  • 只要a+i 产生一个有效的可写地址来存储int,你能想出一个不能工作的原因吗?
  • 好吧,我正在尝试在整数数组中插入一个元素。我从来没有这样做过。所以很高兴知道该怎么做。无论如何,没有编译时错误,但存在一些逻辑错误,因为在从用户输入数组后,我无法使用它插入其他元素。我将数组的基数传递给另一个函数,并在其中使用指针插入元素。
  • 好吧,如果你从来没有这样做过并且你正在使用 C++ 工作,为什么要养成一个坏习惯呢?使用 C++ 流。

标签: c c arrays pointers scanf


【解决方案1】:

当然:如果aint* 或数组int a[10],并且i 介于0 和9 之间,则此表达式有效。

a+i 表达式是&a[i] 的指针算术等价物,它也是传递给scanf 的有效表达式。

【讨论】:

  • 如果aint a[10] 或类似的,也可以工作——当然,只要i 在范围内。
【解决方案2】:

是的,您可以使用 a+i 代替 &a[i],,,, 下面的代码要求您输入 10 个数字,并将它们保存在一个数组中,,,,然后显示其中的数字。

检查此代码:

#include <stdio.h>

int main (void)
{
    int a[10], i, j = 0;

    for(i = 0; i < 10; ++i ){

    printf("Element no %d = ",i);

    scanf("%d",a+i);}

    printf("Elements in your array are: ");

    for(j = 0; j < 10; j++)

    printf("%d  ",a[j]);

return 0;
}

希望这段代码能帮到你!!

【讨论】:

    【解决方案3】:

    试试这个解决方案:

    #include <stdio.h>
    
    int main (void)
    {
      int *p, i, j = 0, n;
      printf("enter the value of n ");
      scanf("%d",&n);
      for(i = 0; i < n; ++i ){
        scanf("%d",p+i);}
    
      printf("Elements in your array are: ");
    
      for(j = 0; j < 10; j++)
        printf("%d  ",*(p+i));
      return 0;
    }
    

    【讨论】:

    • @Magish 你为什么要这样编辑in rev 3?根据我的阅读用户提出的问题,请参阅上面的评论:“我在这段代码中遇到分段错误”(是的,这看起来像是一个公然的非答案,我认为应该这样标记)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2021-08-17
    • 2011-06-12
    • 2016-07-02
    相关资源
    最近更新 更多