【问题标题】:C concepts on arrays [closed]关于数组的 C 概念 [关闭]
【发布时间】:2014-01-28 08:00:34
【问题描述】:
int main(){

    int arr[2]={30,40};
    printf("%dn",i[arr]);
    return 0;
}

我在考试中发现了这个问题,给定的解决方案是 40

但我认为它应该给出一个错误,因为 i 是未定义的。 或者,可能是我错过了什么。 请解释一下40的正确答案是多少?

提前致谢。

【问题讨论】:

  • i 已定义,否则将无法编译,如果 i 具有值 1 则该输出是有意义的。或者,如果 i 真的是 1,那也可以。
  • printf 也未定义...
  • 这是一个 OCR 错误。它应该是 1,而不是 i。
  • 是的@dyp,如果 int i = 1,那么现在定义了 i,因此 1[arr]= arr[1] 的值为 40

标签: c arrays output


【解决方案1】:

你是对的,代码是错误的。很可能,这是一个错字,其意图是定义 i 或使用 1[arr]

【讨论】:

  • 感谢 eric 的回复。我同意你的看法。可能是错字。
【解决方案2】:

可能这是一个错误,因为i 没有定义。

另外,练习的目的可能是利用 C 中的这一事实,您可以编写 v[ i ] 以访问 #i 元素向量的v,或i[ v ].

两种形式是等价的。由于v[ i ]被翻译成*( v + i ),实际上它和*( i + v )没有任何区别,i[ v ]被翻译成这样。这不是常见的用法,但仍然有效。

Arrays in C, from Wikipedia

在此特定示例中,1[arr] 将返回预期的答案。

我只是想知道他们为什么选择 40 而不是 42。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    i 可能应该在考试的口语部分或缺失的部分中给出为 1。正如所写,这个问题当然不适用,因为它不能编译。

    问题的真正意义在于测试申请人是否理解array[index] 等同于index[array] 以及(大概)为什么。

    【讨论】:

      【解决方案4】:

      在 C array[index] = *(array + index) = *(index + array) = index[array] 中。假设i1(否则行为未定义),1[arr] 等价于arr[1],它包含值40

      【讨论】:

        【解决方案5】:

        嗯,让我们看看……

        matilda:~ jeremyp$ cat > foo.c
        int main(){
        
            int arr[2]={30,40};
            printf("%dn",i[arr]);
            return 0;
        }
        matilda:~ jeremyp$ cc foo.c
        foo.c:4:5: warning: implicitly declaring library function 'printf' with type 'int (const char *, ...)'
            printf("%dn",i[arr]);
            ^
        foo.c:4:5: note: please include the header <stdio.h> or explicitly provide a declaration for 'printf'
        foo.c:4:18: error: use of undeclared identifier 'i'
            printf("%dn",i[arr]);
                         ^
        1 warning and 1 error generated.
        

        确实,i 未定义。你要么需要

        int i = 1;
        

        在该语句之前或者它不是i,它是1。让我们试试……

        matilda:~ jeremyp$ cat >foo.c
        #include <stdio.h> // Stops the warning
        int main(){
        
            int arr[2]={30,40};
            printf("%d\n",1[arr]); // Also added a \ so we get a line feed.
            return 0;
        }
        matilda:~ jeremyp$ cc foo.c
        matilda:~ jeremyp$ ./a.out
        40
        

        现在可以了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-13
          • 2013-10-17
          • 1970-01-01
          相关资源
          最近更新 更多