#include "stdio.h" | |
#include "stdlib.h" | |
#define InitSize 100 | |
typedef struct | |
{ | |
int *data; | |
int length; | |
} SeqList; | |
int InitList (SeqList *L) { | |
//SeqList L; | |
(*L).data = NULL; | |
(*L).data = (int *)malloc(sizeof(int) * InitSize); | |
if(!(*L).data) {return (-1);} | |
(*L).length = 0; | |
return 0; | |
} | |
int ListInsert (SeqList L, int i, int e) { | |
printf("%X\n",&L); | |
printf("%d\n", L.length); | |
if (i<1 || i>L.length+1) return -1; | |
if( i>InitSize ) return -1; | |
for (int j=L.length; j>=i; j--) { | |
L.data[j] = L.data[j-1]; | |
} | |
L.data[i-1] = e; | |
L.length++; | |
printf("hi\n"); | |
return 0; | |
} | |
int PrintList (SeqList L) { | |
printf("%X\n",&L); | |
printf("%d\n", L.length); | |
for(int j=0; j<L.length; j++) { | |
printf("%d, ", L.data[j]); | |
} | |
return 0; | |
} | |
int main(void) | |
{ | |
SeqList L; | |
InitList(&L); | |
printf("m %X\n", &L); | |
ListInsert(L, 1, 19); | |
ListInsert(L, 2, 11); | |
ListInsert(L, 3, 12); | |
PrintList(L); | |
return 0; | |
} |
![]() |
1
canautumn 2014-11-26 01:47:37 +08:00
ListInsert后边是传值传递,不是引用传递。L被复制了一份传进函数了。所以地址不同,而且不会修改主函数里的L。
|
![]() |
2
canautumn 2014-11-26 01:53:40 +08:00 ![]() 又看了一眼。L复制了一份,所以L本身的地址变了,但是data和length的指针位置直接被复制,是不变的,所以data的值改了。但是L.length++是指针自增1,不是值自增1。应该是*(L.length)++,不过建议一个int不要用指针了。
|
![]() |
3
bbvps 2014-11-26 04:25:41 +08:00
int ListInsert (SeqList L, int i, int e)--> int ListInsert (SeqList *L, int i, int e) 并修改这个函数的内部,则能够达到你想要的结果。
|
4
pljhonglu 2014-11-26 08:54:07 +08:00
ListInsert应该传引用值,要搞清楚值传递与引用传递的区别。
|