C语言中的数组

C语言中的数组,c,C,我是C编程语言的初学者,因此需要对此进行解释: #include <stdio.h> #include <stdlib.h> int main() { int NUM[10]; int i,index; for(i=0 ; i<8 ; i++){ NUM[index]=i; index++; } printf("this is the number %d\n\n",NUM);

我是C编程语言的初学者,因此需要对此进行解释:

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int NUM[10];
    int i,index;


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

        NUM[index]=i;

        index++;
    }


    printf("this is the number %d\n\n",NUM);
    return 0;
}

为什么控制台中的数字不正确?

不清楚您想做什么。但是,如果要打印数组中的元素,则不能编写一条printf语句并期望按顺序打印出元素

要按顺序打印数组的元素,必须使用for循环。像这样的-

for (i=0; i<8; i++) 
{
     printf("%d", num[i]);
}
for(i=0;i
printf(“这是数字%d\n\n”,NUM);
NUM
传递到
printf
以使用
%d
转换说明符进行格式化

NUM
是一个数组。在此使用中,它会自动转换为其第一个元素的地址。
%d
希望传递
int
。地址不是
int
。由于这种不匹配,此代码的行为不由C标准定义。充其量,
printf
将打印地址ss格式为十进制

要打印数组的元素,必须编写一个循环来打印每个元素,方法是将
NUM[i]
传递到
printf
,以使用
%d
进行格式化。您可以使用:

for (int i = 0; i < 8; ++i)
    printf("NUM[%d] = %d.\n", i, NUM[i]);
for(int i=0;i<8;++i)
printf(“NUM[%d]=%d.\n”,i,NUM[i]);

所以这里有很多问题。首先,您初始化一个整数区域(NUM),然后尝试在末尾打印它。此外,您初始化i,但不初始化索引。这将导致填充NUM的值与您期望的值不同,因为您的起点是“垃圾”

下面我包含了一个稍微修改过的版本。请注意,在初始化索引后,我给它赋值,使起点为零,就像
I
一样。我在循环中做了一个稍微修改,我有
for(I=0;I
。这里唯一的区别不是迭代任意次数(在您的例子中是8次),而是根据数组的总长度(以字节为单位)除以每个元素的长度(以字节为单位)来迭代循环这将生成它包含的整数总数。然后,我打印区域中的每个元素,因为它被分配了
printf(“这是数字%d\n\n”,NUM[I]);

#包括
#包括
int main()
{
int NUM[10];
int i,索引;
指数=0;
对于(i=0;i
index
未初始化,因此其值是不确定的。因此,访问其值会产生未定义的行为。将其用作数组索引(分配给
NUM[index]
的第一件事)并递增(
index++
)两者都通过访问
索引的值来工作。在循环之前将
索引初始化为有效值(例如
0
)。此外,
NUM
是一个数组,而不是单个
int
。使用
%d
打印它会告诉
printf()
假设
NUM
不是
int
(即存在类型不匹配)因此
printf()
语句也具有未定义的行为。
for (int i = 0; i < 8; ++i)
    printf("NUM[%d] = %d.\n", i, NUM[i]);
#include <stdio.h>
#include <stdlib.h>

int main()
{

    int NUM[10];
    int i,index;
    index = 0;

    for(i=0 ; i < sizeof(NUM)/sizeof(NUM[0]); i++){
        NUM[index]=i;
        printf("this is the number %d\n\n",NUM[i]);
        index++;
    }
    return 0;
}