int数组排序修改数组内容



我正在编写处理字符串和整型数组的代码。

这个可以编译并运行,但是数组的内容被修改了。

代码给出了最大的数的主要结果。但是,在排序过程之后,我显示了数组的内容,其中一个元素被修改为0。那么,这是什么原因呢?

问候,

#include<stdio.h>
#include<string.h>
#include<stdint.h>
int main()
{
static uint8_t arr2[]={5,100,-2,75,42},cr=0,ps=1,temp=0;
uint8_t i;
for (i=0;i<sizeof(arr2);i++)
{
    printf("1stloop[%d]n",i);
    if (arr2[cr]>arr2[ps])
    {
        printf("before change1 cr %d ps %dn",arr2[cr],arr2[ps]);
        temp=arr2[cr];
        arr2[cr]=arr2[ps];
        arr2[ps]=temp;
        printf("change1        cr %d ps %dnn",arr2[cr],arr2[ps]);
        if (arr2[cr-1]>arr2[ps-1])
        {
            printf("before change2 cr %d ps %dn",arr2[cr-1],arr2[ps-1]);
            temp=arr2[cr-1];
            arr2[cr-1]=arr2[ps-1];
            arr2[ps-1]=temp;
            printf("change2        cr %d ps %dnn",arr2[cr-1],arr2[ps-1]);
        }
    }
    cr++; ps++;
}
    for (i=0;i<sizeof(arr2);i++)
{
    printf("contents %d n",arr2[i]);
}
printf("nLargest No. in arr2 of arr2 is %d n",(arr2[sizeof(arr2)]));
return 0;
}

如果您在执行for循环的最后一步时运行代码,则值将为i=4,cr=4,ps=5。正如您可以看到的,arr2[]的总元素为5,但您试图将代码中的第5个元素与第6个元素进行比较,因此它将第6个元素作为0并将根据您的逻辑执行。

在for循环条件下你可以修改


代替这个for (i=0;i<sizeof(arr2);i++)你可以试试这个for (i=0;i<sizeof(arr2) && ps<sizeof(arr2);i++)


这不会修改数组的表项。但由于它是无符号字符,元素'-2'的入口将被视为'254'。

最新更新