我刚刚开始用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还没有在任何地方宣布吗?
任何比在我发现这个例子的网站上更深层次的解释将不胜感激。谢谢。
答案 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
printf
和i
都有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。