arrays - 为什么数组的大小比括号内的元素长?
问题描述
我正在努力理解排序并遇到了这个问题。当我打印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;
}
解决方案
sizeof(array)
将以字节为单位返回数组的大小,并且由于每个整数都是 4 个字节,这就是为什么您将 8 个元素的大小设为 32 个字节(8 * 4 个字节)。
要获取数组中的元素数,您应该使用:
size_t n = sizeof(array) / sizeof(int);
现在,如果您使用上述大小,那么您的排序应该可以正常工作。
推荐阅读
- reactjs - 我是新手,我在尝试从 firestore 获取数据字段以显示在我的应用程序屏幕上时遇到很多问题
- php - PHP关于座位预订系统的想法?
- reactjs - React GraphQL 突变返回无效输入
- java - Java 11 无法解析本地日期时间
- android - 如何从模拟器的新更新中更改位置(纬度和经度):Android Studio
- atom-editor - 查找 (2) 换行符并替换为 (1)
- reactjs - 反应导航,路线数据正在抛出“未定义不是对象”
- java - 如何在不使用 replace 方法的情况下替换 Java 中的子字符串?
- python - 随机森林分类,声称非常高的准确性,但它甚至不接近。我究竟做错了什么?
- typescript - 只允许在 Typescript 中使用一些枚举