关于我在网上找到的数组示例的更多解释

时间:2017-01-30 16:32:21

标签: c arrays

我刚刚开始用C学习程序,我正试图了解数组。我在网上找到了这个例子,但不知道它是如何工作的。这是代码:

#include <stdio.h>

int main () {

   int n[ 10 ]; /* n is an array of 10 integers */
   int i,j;

   /* initialize elements of array n to 0 */         
   for ( i = 0; i < 10; i++ ) {
      n[ i ] = i + 100; /* set element at location i to i + 100 */
   }

   /* output each array element's value */
   for (j = 0; j < 10; j++ ) {
      printf("Element[%d] = %d\n", j, n[j] );
   }

   return 0;
}

我在这里不明白的是int j如何链接到int i。在输出中,在printf行,我不明白为什么不是:

printf("Element[%d] = %d\n", i, n[i]);

为什么我们需要另一个int j?

另一件我不理解的事情就是那条线上的%d。为什么%d而不是%i? d还没有在任何地方宣布吗?

任何比在我发现这个例子的网站上更深层次的解释将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:1)

同意@ Eugene Sh,在这种情况下,j确实是一个额外的变量。 编码如下所示,并返回相同的输出。

    for (i = 0; i < 10; i++) {
    printf("Element[%d] = %d\n", i, n[i]);
}
  

另一件我不明白的是那条线上的%d。

printf()系列函数使用%字符作为占位符。这是格式说明符,不需要初始化。遇到%时,printf会读取%后面的字符以确定要执行的操作:

%s - Take the next argument and print it as a string
%d - Take the next argument and print it as an int

迟早你可能会遇到%s,这表明你期望一个String成为你的第一个打印参数。

希望这有帮助。

答案 1 :(得分:1)

  

为什么我们需要另一个int j?

你没有。我假设作者只是在证明你可以使用任何变量来索引数组,只要变量具有正确的类型(几乎是任何整数类型)并保持正确范围内的值。

数组索引可以是任何整数表达式,无论它是整数常量(a[5]),变量(a[i]a[j])还是更复杂的表达式({{1} },a[i+j]a[foo(i)]等)。重要的是表达式具有整数类型,并且其结果在正确的范围内(a[1+j*k/2]0,其中N-1是数组中元素的总数)。

  

另一件我不明白的是那条线上的%d。为什么%d而不是%i? d还没有在任何地方宣布吗?

N转换说明符 - 它与任何变量无关,也不需要单独声明。格式字符串中的转换说明符告诉%d其他参数的数量和类型,以及如何格式化这些值以进行显示。

在第

printf

格式字符串中的printf("Element[%d] = %d\n", i, n[i]); 说明符告诉%d printfi都有n[i]类型,并且它们将被格式化为十进制整数(例如,与十六进制或八进制相对)。

以下是转换说明符的不完整列表:

int

查看便捷的C参考手册以获取完整列表。如果您没有方便的C参考手册,我推荐Harbison&amp;斯蒂尔的C: A Reference Manual

答案 2 :(得分:0)

  

我在这里不明白的是int j如何链接到int i

他们没有“链接”,两者之间实际上没有联系。作者只是使用另一个整数( j )来避免混淆。

至于你的建议:

  

在输出中,在printf行,我不明白为什么不是:

     

printf(“元素[%d] =%d \ n”,i,n [i]);

如果确保使用 i 作为第二个循环的循环变量,那么这样做是完全没问题的:

for (i = 0; i < 10; i++ ) {
      printf("Element[%d] = %d\n", i, n[i] );
   }
  

另一件我不明白的是那条线上的%d。为什么%d而不是%i? d还没有在任何地方宣布吗?

%d 是一种类型修饰符,它告诉 printf 函数在打印时用十进制数字替换它。它与某种名为 d 的变量无关。您的困惑可能源于 printf 还有一个%i 修饰符,但它不太常用。有关详细信息,请参阅this wiki