int array sort修改数组内容

时间:2016-08-21 12:14:04

标签: c arrays sorting int

我正在研究处理字符串和整数数组的代码。

这个编译并运行OK,但是数组的内容会被修改。

代码给出的主要结果是最大的数字。 但是,在排序过程之后,我显示数组的内容,其中一个元素被修改为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 %d\n",arr2[cr],arr2[ps]);
        temp=arr2[cr];
        arr2[cr]=arr2[ps];
        arr2[ps]=temp;
        printf("change1        cr %d ps %d\n\n",arr2[cr],arr2[ps]);

        if (arr2[cr-1]>arr2[ps-1])
        {
            printf("before change2 cr %d ps %d\n",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 %d\n\n",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;
}

1 个答案:

答案 0 :(得分:1)

如果你在执行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++)

这不会修改array.But的条目,因为它是unsigned char,元素的输入&#39; -2&#39;将被视为&#39; 254&#39;。