为什么会修改data[2]的值

为什么会修改data[2]的值,搞半天没弄明白,到底什么原因啊,求解答,谢谢。

img

img

img

除了把你上面提供的代码的函数声明处添加了相应参数后,以及在main函数里把L变量的类型改为LIST后,代码可以正常运行了。

两处修改都因为编译时报错,第一个是因为定义函数处的原型要和声明函数处原型一致,第二个是因为几处函数都需要一个LIST指针,而不是LIST指针的指针,修改后可以正常运行。修改如下:

#include<stdio.h>

struct MYLIST{
    int length;
    int data[100];
};

typedef struct MYLIST LIST;
void Isert(LIST * L ,int n);
void MyPrint(LIST *L);
void MySort(LIST*L);
void Add(LIST*L,int x);



int main(void){
    
    LIST  L ;
    int n;
    int x;
    printf("为数组赋多少元素:");
    scanf("%d",&n);
    Isert(&L,n);
    printf("顺序表数据原顺序为:");
    MyPrint(&L);
    printf("\n升序排序后的顺序为:");
    MySort(&L);
    MyPrint(&L);
    printf("\n输入您要添加的数据:");
    scanf("%d",&x);
    Add(&L,x);
    MySort(&L);
    MyPrint(&L);
    
} 

void Isert(LIST * L,int n){
    L->length = n;
    for(int i=1;i<=n;i++){
        printf("第%d个元素为:",i);
        scanf("%d",&L->data[i-1]);
    }
}

void MyPrint(LIST * L){
//    printf("L-length=%d\n",L->length);
    for(int i=0;i<L->length;i++){
        printf("%d\t",L->data[i]);
    //    printf("L->data[%d]=%d\t",i,L->data[i]);
    }
    printf("\n");
}

void MySort(LIST *L){
    //printf("L-length=%d\n",L->length);
    for(int i=0;i<L->length;i++){
    //    printf("L->data[%d]=%d\t",i,L->data[i]);
        for(int j=i+1;j<L->length;j++){
            
            if(L->data[i]>=L->data[j]){
                int temp = L->data[i];
                L->data[i] = L->data[j];
                L->data[j] = temp;
            }
        }
    } 
}

void Add(LIST * L, int x){
    L->data[L->length] = x;
    L->length++;
}

img