我试图创建一个简单的程序来打印出整个数组,但该程序给出了一些甚至不在数组中的值。 为什么会这样,我该如何解决?
法典:
#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 个问题:
len=sizeof(array);
sizeof() 返回内存的字节数。一个 int 需要 2 或 4 个字节的内存,具体取决于编译器。在您的情况下,数组有 4 个整数。因此,sizeof(array)
会给你16(4*4)而不是你所期望的4。 解决方案len=sizeof(array)/size(int);
,这将为您提供array
中的项目数- 这个实际上不是问题。
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 )
等于4
则sizeof( 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
变量中。你要做什么!
sizeof()
运算符可用于查找数组的长度。- 然后按数组的一个元素的大小
dividing
它。 - 显示
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]);
}
}
阅读更多 查找数组的长度