c语言 - 打印数组给我的值比数组实际具有的值多



我试图创建一个简单的程序来打印出整个数组,但该程序给出了一些甚至不在数组中的值。 为什么会这样,我该如何解决?

法典:

#include <cs50.h>
#include <stdio.h>
int main (void)
{
int array[]={1,2,3,7};
int len=sizeof(array);
for(int i=0;i!=len;i++)
{
printf("%in",array[i]);
}
}

我想要的输出:

1
2
3
7

我得到什么:

1
2
3
7
-1483754768
32766
0
0
4195904
0
-953930857
32541
1
0
-1483754760
32766

如您所见,它打印出我放置在数组中的值,但它也打印出许多我从未放入其中的值。

Sizeof() 返回数组的大小(以字节为单位)。所以它将返回 4 字节*4单元格 =16 字节。然后,因为您将其存储在整数变量中,因此会将其转换为十进制。你要做的是sizeof(array)/sizeof(int),它将为您提供数组的精确单元格数

sizeof 为您提供以字节为单位的大小。要获得数组元素的数量,您需要将其除以数组元素的大小

int len=sizeof(array) / sizeof(array[0]);

您的代码有 2 个问题:

  1. len=sizeof(array);sizeof() 返回内存的字节数。一个 int 需要 2 或 4 个字节的内存,具体取决于编译器。在您的情况下,数组有 4 个整数。因此,sizeof(array)会给你16(4*4)而不是你所期望的4。 解决方案len=sizeof(array)/size(int);,这将为您提供array中的项目数
  2. 这个实际上不是问题。
    for ( init; condition; increment ) { statement(s); }
    我建议您在应该使用for(int i=0;i<len;i++)for循环中稍微更改一下condition以提高可读性。程序员使用i!=len不要误会我的意思并不常见,但大多数程序员更喜欢i<10我希望

    它对:)有所帮助快乐编码

如果你有一个数组声明为:

T array[N];

其中T是数组元素的类型,N是元素的数量,则sizeof( array )等于N * sizeof( T ),并产生数组占用的内存量的大小。

所以对于这个宣言

int array[]={1,2,3,7};
int len=sizeof(array);

sizeof( array )等于4 * sizeof( int ),如果sizeof( int )等于4sizeof( array )等于16

但是在循环中,您需要元素的数量,而不是数组占用的内存大小。

所以你应该写例如

size_t len = sizeof( array ) / sizeof( int );

请注意,带有 sizeof 运算符的表达式类型具有size_t的类型

。您可以使用您的方法通过以下方式计算数组中的元素数量

size_t len=sizeof(array);

前提是数组array的元素类型char

char array[] = { '1', '2', '3', '7' };

因为sizeof( char )总是等于1.所以sizeof( array ) / sizeof( char )相当于sizeof( array ).

如果要将数组的长度存储在len变量中。你要做什么!

  1. sizeof()运算符可用于查找数组的长度。
  2. 然后按数组的一个元素的大小dividing它。
  3. 显示len

例如:

#include <stdio.h>
int main (void)
{
int array[]={1,2,3,7};
int len=sizeof(array)/sizeof(array[0]);
for(int i=0;i!=len;i++)
{
printf("%in",array[i]);
}
}

阅读更多 查找数组的长度

最新更新