数组排序为什么报错怎么改


#include <stdio.h>
#include <stdlib.h>

int creat(int n){

int arr[n];

for(int i=0;i<n;i++)
{
    scanf("%d",&arr[i]);
}

for(int i=0;i<n;i++){

printf("%d",arr[i]);

}

}




int search(int arr[],int n){

    int length = sizeof(arr)/sizeof(arr[0]);

    for(int i=0;i<length;i++){

        if(arr[i]==n){

            return i;

        }
  }
}



void delete(int arr[],int n){

    int length = sizeof(arr)/sizeof(arr[0]);

    for(int i=n;i<=length;i++){

        arr[i]=arr[i+1];
    }

 for(int i=0;i<length-1;i++){
    printf("%d",arr[i]);
 }

}




void sort(int arr[]){

    int length = sizeof(arr)/sizeof(arr[0]);

    int temp=0;

    for(int i=0;i<length-1;i++){

        for(int j=0;j<=length-1-i;j++){

       if(arr[j]>arr[j+1]){

        temp=arr[j];

        arr[j]=arr[j+1];

        arr[j+1]=temp;
       }

       }

}
}


void print(int arr[]){

int length = sizeof(arr)/sizeof(arr[0]);

for(int i=0;i<length;i++){

    printf("%d",arr[i]);
}


}



int main()
{
    int arr1[10]={4,5,6,2,9,7,1,3,8};

   // printf("%d\n",search(arr1,4));

    //delete(arr1,0);


    //printf("\n");


    sort(arr1);

    print(arr1);

    //creat(4);


    return 0;
}

?


 int length = sizeof(arr)/sizeof(arr[0]);

编译报什么错,截图看一看

【相关推荐】



  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7607571
  • 你也可以参考下这篇文章:数组强制转化为结构体指针
  • 除此之外, 这篇博客: <数据结构> 顺序表中的 尾删 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 思想:

    这里size就是统计开辟的数组中有效数据的个数,只需要把有效数据的个数-1,打印的时候自然会把原本最后一个数据给删掉,但是要注意,如果删除次数过多,有效数据size可能会变成负的,为了避免这一现象,只需要确保在size>0时再减减即可,同样为了防止传入空指针,只需要assert断言即可。

    • SeqList.h文件:
    //尾删
    void SeqListPopBack(SeqList* psl);
    • SeqList.c文件:
    //尾删
    void SeqListPopBack(SeqList* psl)
    {
    	assert(psl);
    	if (psl->size > 0)
    	{
    		psl->size--;
    	}
    }
    • Test.c文件:
    int main()
    {
    	SeqList s;
    	SeqListInit(&s); //一定要加上&,因为形参的改变不会影响实参,要传地址
    	//尾插5个数字
    	SeqListPushBack(&s, 1);
    	SeqListPushBack(&s, 2);
    	SeqListPushBack(&s, 3);
    	SeqListPushBack(&s, 4);
    	SeqListPushBack(&s, 5);
    	SeqListPrint(&s); //尾插5次后打印
    
    	//尾删6个数字
    	SeqListPopBack(&s);
    	SeqListPopBack(&s);
    	SeqListPopBack(&s);
    	SeqListPopBack(&s);
    	SeqListPopBack(&s);
    	SeqListPopBack(&s);
    	SeqListPopBack(&s);
    	SeqListPrint(&s); //尾删6次后打印
    
    	//再尾插2个数字
    	SeqListPushBack(&s, 6);
    	SeqListPushBack(&s, 7);
    	SeqListPrint(&s); //再尾插2次打印
    	return 0;
    }
    • 效果如下:


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^