cookies945 发表于 2019-2-12 11:49:23

求助怎么才能把结构体数组调到函数里?

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

#define MAX 100

struct staticLinkList{
        int data;
        int cur;
}SLL;

int init(struct staticLinkList);
int Malloc_SLL(struct staticLinkList);
int insert(struct staticLinkList,int n,int m);
int del(struct staticLinkList,int n);
int Free(struct staticLinkList,int k);

int main(void){
        int op,i,j;
        printf("请选择需要的操作:\n");
        printf("1 初始化静态链表\n2 插入元素\n 3删除元素\n4 退出\n");
        scanf("%d,&op");
        switch(op){
                case 1: init(SLL);break;
                case 2: printf("请输入要插入的位置与数字:");scanf("%d%d",&i,&i);insert(SLL,i,j);break;
                case 3: printf("请输入要删除的元素的位置:");scanf("%d",&i);del(SLL,i);break;
                case 4: exit(1);
        return 0;
}

int init(struct staticLinkList SLL){
        int i;
        for(i = 0;i < MAX - 1;i++){
                SLL.data = 0;
                SLL.cur = i + 1;
        }
        SLL.cur = 0;
        return 1;
}
int Malloc_SLL(struct staticLinkList SLL){
        int f; // 接收备用链表的起始位置
        f = SLL.cur;
        if(SLL.cur ){
                SLL.cur = SLL.cur;       
        }
        return f;
}
int insert(struct staticLinkList SLL,int n,int m){
        int f = Malloc_SLL(SLL);
        SLL.data = n;
        int s = MAX - 1,i;
        for(i = 0;i < m - 1;i++){
                s = SLL.cur;
        }
        SLL.cur = SLL.cur;
        SLL.cur = f;
        return 1;
}
int del(struct staticLinkList SLL,int n){
        int s = MAX - 1,i,k;
        for(i = 0;i < n - 1;i++){
                s = SLL.cur;
        }
        k = SLL.cur
        SLL.cur = SLL.cur;
        Free(SLL,k);
        return 1;
}
int Free(struct staticLinkList SLL,int k){
        SLL.cur = SLL.cur;
        SLL.cur = k;
       
        return 1;
}
subscripted value is neither array nor pointer nor vector
请问这个错误是怎么一回事?

BngThea 发表于 2019-2-12 12:27:53

形参中的SLL并不是你初始化的SLL
用指针形式来作为形参

jackz007 发表于 2019-2-12 16:38:35

本帖最后由 jackz007 于 2019-2-12 16:57 编辑

      代码问题颇多,现在已经调通,功能细节问题楼主可以自行斟酌修改。

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

#define MAX 100

struct staticLinkList{
      int data ;
      int cur;
}SLL      ;

int init(struct staticLinkList SLL[]){
      int i;
      for(i = 0;i < MAX - 1;i++){
                SLL.data = 0;
                SLL.cur = i + 1;
      }
      SLL.cur = 0;
      return 1;
}

int Malloc_SLL(struct staticLinkList SLL[]){
      int f                                       ; // 接收备用链表的起始位置
      f = SLL . cur                              ;
      if(SLL . cur ) SLL . cur = SLL . cur ;   
      return f;
}

int insert(struct staticLinkList SLL[] , int n , int m){
      int f = Malloc_SLL(SLL)                        ;
      SLL . data = n                              ;
      int s = MAX - 1 , i                            ;
      for(i = 0 ; i < m - 1 ; i ++) s = SLL . cur ;
      SLL . cur = SLL . cur                  ;
      SLL . cur = f                               ;
      return 1                                       ;
}

int Free(struct staticLinkList SLL[] , int k){
      SLL . cur = SLL . cur ;
      SLL . cur = k            ;
      return 1                  ;
}

int del(struct staticLinkList SLL[] , int n){
      int s = MAX - 1 , i , k                        ;
      for(i = 0 ; i < n - 1 ; i ++) s = SLL . cur ;
      k = SLL . cur                               ;
      SLL . cur = SLL . cur                  ;
      Free(SLL , k)                                  ;
      return 1                                       ;
}

int main(void){
      int op , i , j                                                                                                         ;
      bool f                                                                                                               ;
      f = true                                                                                                               ;
      while(f) {
                printf("请选择需要的操作:\n")                                                                                 ;
                printf("1 初始化静态链表\n2 插入元素\n3 删除元素\n4 显示\n5 退出\n")                                           ;
                scanf("%d" , & op)                                                                                             ;
                switch(op){
                        case 1: init(SLL) ; break                                                                              ;
                        case 2: printf("请输入要插入的位置与数字:") ; scanf("%d%d" , & i , & j) ; insert(SLL , i , j) ; break ;
                        case 3: printf("请输入要删除的元素的位置:") ; scanf("%d" , & i) ; del(SLL , i) ; break                ;
                        case 4: for(i = 0 ; i < MAX ; i ++) printf("%2d - %2d\n" , SLL . data , SLL . cur) ; break       ;
                        case 5: f = false                                                                                    ;
                }
      }
      return 0                                                                                                               ;
}


      此外,建议楼主最好不要使用 Free() 这样的函数名,容易与系统函数混淆。

cookies945 发表于 2019-2-12 19:13:01

jackz007 发表于 2019-2-12 16:38
代码问题颇多,现在已经调通,功能细节问题楼主可以自行斟酌修改。




好的,感谢指正。我下次会注意的

cookies945 发表于 2019-2-12 19:15:12

BngThea 发表于 2019-2-12 12:27
形参中的SLL并不是你初始化的SLL
用指针形式来作为形参

我想大佬应该能看出这个是静态链表把?静态链表不就是给没有指针的语言用的么
页: [1]
查看完整版本: 求助怎么才能把结构体数组调到函数里?