c - int数组排序修改数组内容

标签 c arrays sorting 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 %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;
}

最佳答案

如果您在执行 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”。

关于c - int数组排序修改数组内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39064061/

相关文章:

c - 在 Linux 上设置 libcurl

编译器不会在函数参数不匹配时发出错误/警告

c - 字数统计程序 - stdin

javascript - 比较日期并创建计数 javascript

ruby - Ruby 哈希上的多字符串元素排序,第一个键降序,第二个键升序

macos - 按字母顺序对 NSPopUpMenu 项目进行排序

C - while 循环卡在条件上

Javascript根据子集更新对象数组中的特定元素

c - 如何按字典顺序对结构中的字符串进行排序?

javascript - 如何在 ng-repeat 中对 JSON 数据进行排序?