首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言中结构体可以作为引用传递吗?如果可以为什么以下程序老出错(来自严蔚敏的数据结构)!求解决方法

2012-04-09 
c语言中结构体可以作为引用传递吗?如果可以为什么以下程序老出错(来自严蔚敏的数据结构)!急求如题 代码如

c语言中结构体可以作为引用传递吗?如果可以为什么以下程序老出错(来自严蔚敏的数据结构)!急求
如题 代码如下
希望那个高手帮忙解决其中错误

#include<stdio.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct Wsqlist 
{
  int* elem;
  int length;
  int listsize;  
}Sqlist ;

int Initlist_Sq(Sqlist& Li);
int ListInsert_Sq(Sqlist& L,int i,int e);
int ListDelete_Sq(Sqlist& L,int i,int &e);

int Initlist_Sq(Sqlist& Li)
{
  Li.elem=(int *) malloc(sizeof(int)*LIST_INIT_SIZE );
  printf("OK!\n");
  if(Li.elem==NULL) exit(1);
  Li.length = 0;
  Li.listsize = LIST_INIT_SIZE;
  printf("OK!\n");
  return 0;
}
int ListInsert_Sq(Sqlist& L,int i,int e)
{
  int *p,*q;
  if(i<1||i>L.length+1) exit(1);
  if(L.length>=L.listsize)
  {
  int *newbase;
  newbase = (int *)realloc(L.elem,sizeof(int)*(L.listsize+LISTINCREMENT));
  if(!newbase) exit(1);
  L.elem = newbase;
  L.listsize+=LISTINCREMENT; 
  }  
  if(L.length==0) 
  L.elem[0]= e;
  else
  {
  q = &(L.elem[i-1]);
  for(p=&(L.elem[L.length-1]);p>=q;--p)
  *(p+1) = *p;
   
  *q = e;
  } 
  ++L.length;
  return 0; 
}

int ListDelete_Sq(Sqlist& L,int i,int &e)
{
  int *p,*q;
  if(i<1||i>L.length+1) exit(1);  
  p = &(L.elem[i-1]);
  e = *p;
  q = L.elem+L.length-1;
  for(;p<q;++p) *p = *(p+1);
  --L.length;
  return e; 
}
int main()
{
  Sqlist list;
  int m=0,n=0;
  Initlist_Sq(list);
  ListInsert_Sq(list,1,12);
  m = ListDelete_Sq(list,1,&n);  
  printf("%d\n",list.length); 
  getch(); 
  return 0;  
}


[解决办法]
不可以,因为C中根本没有引用。呵呵

如果在C++中,结构体是可以有引用的
[解决办法]

C/C++ code
#include <stdio.h> #include <stdlib.h>#include <malloc.h>#include <conio.h>#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct Wsqlist  {   int* elem;   int length;   int listsize;         }Sqlist ; int Initlist_Sq(Sqlist& Li); int ListInsert_Sq(Sqlist& L,int i,int e); int ListDelete_Sq(Sqlist& L,int i,int &e); int Initlist_Sq(Sqlist& Li) {   Li.elem=(int *) malloc(sizeof(int)*LIST_INIT_SIZE );   printf("OK!\n");   if(Li.elem==NULL) exit(1);   Li.length = 0;   Li.listsize = LIST_INIT_SIZE;   printf("OK!\n");   return 0; } int ListInsert_Sq(Sqlist& L,int i,int e) {   int *p,*q;   if(i <1 ||i >L.length+1) exit(1);   if(L.length >=L.listsize)   {     int *newbase;     newbase = (int *)realloc(L.elem,sizeof(int)*(L.listsize+LISTINCREMENT));     if(!newbase) exit(1);     L.elem = newbase;     L.listsize+=LISTINCREMENT;    }       if(L.length==0)    L.elem[0]= e;   else   {   q = &(L.elem[i-1]);   for(p=&(L.elem[L.length-1]);p >=q;--p)     *(p+1) = *p;       *q = e;   }    ++L.length;   return 0;  } int ListDelete_Sq(Sqlist& L,int i,int &e) {   int *p,*q;   if(i <1 ||i >L.length+1) exit(1);       p = &(L.elem[i-1]);   e = *p;   q = L.elem+L.length-1;   for(;p <q;++p) *p = *(p+1);   --L.length;   return e;  } int main() {   Sqlist list;   int m=0,n=0;   Initlist_Sq(list);   ListInsert_Sq(list,1,12);   m = ListDelete_Sq(list,1,n);     printf("%d\n",list.length);    getch();    return 0;     } 


[解决办法]
你把后缀改成c++再编译下看看。

热点排行