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++中,结构体是可以有引用的
------解决方案--------------------
如题 代码如下
希望那个高手帮忙解决其中错误
#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; }