如何打印 table (int) 的所有元素
How to printf all elements of table (int)
我尝试显示 tab 的所有值,但只显示了前 8 个元素
int tab[] = {0,2,5,3,9,0,8,9,2,0,4,3,0};
printf("taille %d: \n", sizeof(tab));
for (int i=0; i<sizeof(tab); i++)
{
printf("indice : %d et valeur :%d \n", i, *(tab + i ));
}
行
printf("taille %d: \n", sizeof(tab));
调用未定义的行为,允许任何事情发生,将错误类型的数据传递给printf()
。 %d
期望 int
,但 sizeof
returns size_t
。以十进制打印 size_t
的正确格式说明符是 %zu
.
那么,sizeof(tab)
就是数组tab
的字节大小(严格来说是char
的个数)。它不是元素的数量。要获得元素的数量,您必须将其除以一个元素的大小 sizeof(*tab)
.
int tab[] = {0,2,5,3,9,0,8,9,2,0,4,3,0};
printf("taille %zu: \n", sizeof(tab));
for (int i=0; i<sizeof(tab)/sizeof(*tab); i++)
{
printf("indice : %d et valeur :%d \n", i, *(tab + i ));
}
sizeof(tab)
生成包含 13
个元素的所有数组 tab
的字节大小,每个元素的大小等于 sizeof( int )
(即相同如 sizeof( *tab )
)。即
sizeof(tab)
等于 13 * sizeof( int )
反过来可以等于 52
前提是 sizeof( int )
等于 4
.
但是你只需要输出数组的13个元素。
所以你应该这样写
int tab[] = {0,2,5,3,9,0,8,9,2,0,4,3,0};
const size_t N = sizeof( tab ) / sizeof( *tab );
printf( "taille %zu: \n", N );
for ( size_t i = 0; i < N; i++ )
{
printf( "indice : %zu et valeur :%d \n", i, *(tab + i ) );
}
putchar( '\n' );
注意输出size_t
类型的对象需要使用转换说明符zu
.
这是一个演示程序,其中数组输出放在一个单独的函数中。
#include <stdio.h>
FILE * output( const int tab[], size_t n, FILE *fp )
{
fprintf( fp, "taille %zu: \n", n );
for ( size_t i = 0; i < n; i++ )
{
fprintf( fp, "indice : %zu et valeur :%d \n", i, *(tab + i ) );
}
return fp;
}
int main(void)
{
int tab[] = {0,2,5,3,9,0,8,9,2,0,4,3,0};
const size_t N = sizeof( tab ) / sizeof( *tab );
fputc( '\n', output( tab, N, stdout ) );
return 0;
}
程序输出为
taille 13:
indice : 0 et valeur :0
indice : 1 et valeur :2
indice : 2 et valeur :5
indice : 3 et valeur :3
indice : 4 et valeur :9
indice : 5 et valeur :0
indice : 6 et valeur :8
indice : 7 et valeur :9
indice : 8 et valeur :2
indice : 9 et valeur :0
indice : 10 et valeur :4
indice : 11 et valeur :3
indice : 12 et valeur :0
我尝试显示 tab 的所有值,但只显示了前 8 个元素
int tab[] = {0,2,5,3,9,0,8,9,2,0,4,3,0};
printf("taille %d: \n", sizeof(tab));
for (int i=0; i<sizeof(tab); i++)
{
printf("indice : %d et valeur :%d \n", i, *(tab + i ));
}
行
printf("taille %d: \n", sizeof(tab));
调用未定义的行为,允许任何事情发生,将错误类型的数据传递给printf()
。 %d
期望 int
,但 sizeof
returns size_t
。以十进制打印 size_t
的正确格式说明符是 %zu
.
那么,sizeof(tab)
就是数组tab
的字节大小(严格来说是char
的个数)。它不是元素的数量。要获得元素的数量,您必须将其除以一个元素的大小 sizeof(*tab)
.
int tab[] = {0,2,5,3,9,0,8,9,2,0,4,3,0};
printf("taille %zu: \n", sizeof(tab));
for (int i=0; i<sizeof(tab)/sizeof(*tab); i++)
{
printf("indice : %d et valeur :%d \n", i, *(tab + i ));
}
sizeof(tab)
生成包含 13
个元素的所有数组 tab
的字节大小,每个元素的大小等于 sizeof( int )
(即相同如 sizeof( *tab )
)。即
sizeof(tab)
等于 13 * sizeof( int )
反过来可以等于 52
前提是 sizeof( int )
等于 4
.
但是你只需要输出数组的13个元素。
所以你应该这样写
int tab[] = {0,2,5,3,9,0,8,9,2,0,4,3,0};
const size_t N = sizeof( tab ) / sizeof( *tab );
printf( "taille %zu: \n", N );
for ( size_t i = 0; i < N; i++ )
{
printf( "indice : %zu et valeur :%d \n", i, *(tab + i ) );
}
putchar( '\n' );
注意输出size_t
类型的对象需要使用转换说明符zu
.
这是一个演示程序,其中数组输出放在一个单独的函数中。
#include <stdio.h>
FILE * output( const int tab[], size_t n, FILE *fp )
{
fprintf( fp, "taille %zu: \n", n );
for ( size_t i = 0; i < n; i++ )
{
fprintf( fp, "indice : %zu et valeur :%d \n", i, *(tab + i ) );
}
return fp;
}
int main(void)
{
int tab[] = {0,2,5,3,9,0,8,9,2,0,4,3,0};
const size_t N = sizeof( tab ) / sizeof( *tab );
fputc( '\n', output( tab, N, stdout ) );
return 0;
}
程序输出为
taille 13:
indice : 0 et valeur :0
indice : 1 et valeur :2
indice : 2 et valeur :5
indice : 3 et valeur :3
indice : 4 et valeur :9
indice : 5 et valeur :0
indice : 6 et valeur :8
indice : 7 et valeur :9
indice : 8 et valeur :2
indice : 9 et valeur :0
indice : 10 et valeur :4
indice : 11 et valeur :3
indice : 12 et valeur :0