首页 > 解决方案 > 为什么数组的大小比括号内的元素长?

问题描述

我正在努力理解排序并遇到了这个问题。当我打印array[]我得到 32 的大小时。为什么是 32 而不是 8?此外,当我打印每个元素时,为什么数字在数组末尾排序(从数组 [24] 及以后?)。我也试过

int array[8]= {6,3,8,5,2,7,4,1};

但它不会改变任何东西。

谢谢您的帮助!

#include <stdio.h>

int array[]= {6,3,8,5,2,7,4,1};

int main ()
{   
    printf("si of array %lu \n", sizeof(array));
    for (int i = 0; i < sizeof(array); i++)
    {
         for (int  j = i+1; j < sizeof(array); j++)
    {
            if (array[i] > array[j])
            {
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
    printf("sizee of array %lu \n", sizeof(array));

    for (int i = 0; i < sizeof(array); i++)
    {
        printf("array[%i] = %d \n", i ,array[i]);
    }
    return 0;
}

标签: arrayssorting

解决方案


sizeof(array)将以字节为单位返回数组的大小,并且由于每个整数都是 4 个字节,这就是为什么您将 8 个元素的大小设为 32 个字节(8 * 4 个字节)。

要获取数组中的元素数,您应该使用:

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

现在,如果您使用上述大小,那么您的排序应该可以正常工作。


推荐阅读