如何打印表的所有元素int

问题描述

我尝试显示选项卡的所有值,但只显示第 8 个元素

int tab[] = {0,2,5,3,9,8,4,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 ));
    }

解决方法

sizeof(tab) 生成包含 tab 元素的所有数组 13 的字节大小,每个元素的大小等于 sizeof( int )(与 { {1}})。那是

sizeof( *tab ) 等于 sizeof(tab),而 13 * sizeof( int ) 又可以等于 52,前提是 sizeof( int ) 等于 4

但是你只需要输出数组的 13 个元素。

所以你应该写例如

int tab[] = {0,2,5,3,9,8,4,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",*(tab + i ) );
    }
    
    return fp;
}

int main(void) 
{
    int tab[] = {0,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 
,

线

printf("taille %d: \n",sizeof(tab));

调用未定义行为,通过将错误类型的数据传递给printf(),允许任何事情发生。 %d 期望 int,但 sizeof 返回 size_t。以十进制打印 size_t 的正确格式说明符是 %zu

那么,sizeof(tab) 是以字节为单位的数组 tab 的大小(严格来说是 char 的数量)。它不是元素的数量。要获得元素的数量,您必须将其除以一个元素 sizeof(*tab) 的大小。

int tab[] = {0,0};
printf("taille %zu: \n",sizeof(tab));

for (int i=0; i<sizeof(tab)/sizeof(*tab); i++)
{
    printf("indice : %d et valeur :%d \n",*(tab + i ));
}