今天閒著沒事實現了一下數據結構裡面的順序表,在順表初始創建的時候遇到了這樣一個問題。
#include#include #define MaxSize 1000 #define ElemType int typedef struct { ElemType data[MaxSize]; int length; }SqList; int isListEmpty(SqList *L); int *p; void CreateList(SqList *LTMP,ElemType a[],int n){ printf("%p ",LTMP); LTMP=(SqList *)malloc(sizeof(SqList)); printf("%p ",LTMP); p=(int *)LTMP; printf("%p\n",p); for(int i=0;i length;i++){ printf("%d ",L->data[i]); } printf("\n"); } int isListEmpty(SqList *L){ return(L->length==0); } int main() { int a[3]={1,2,3}; SqList * L=NULL; printf("%p ",L); CreateList(L,a,3); printf("%d %d %d \n",*p,*(p+1),*(p+2)); printf("%p\n",L); //dispList(L); }
第一個地址表示實參L的地址,因為L為NULL,所以地址為0地址。第二個地址為L的傳遞給CreateList函數的形式參數,LTMP一樣指向NULL,同樣為0地址。<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+tdrI/bj2tdjWt9PJ09q4+ExUTVC31sXkwcvQwrXExNq05r/VvOSjrNa4z/JtYWxsb2O/qrHZtcTSu7bOtq/MrMTatOajrMrXtdjWt86qMDAwLi4uMDAzMzcwMDCjrLXay8S49rXY1rfKx8irvtax5MG/1rjV61DWuM/yTFRNULXEtdjWt6Os0rLOqjAwMC4uLjAwMzM3MDAwoaO1q8rHtbG6r8r91MvQ0L3hyvi686OstffTw7qvyv3Vu86qv9WjrMHZyrGx5MG/0rKxu8rNt8WjrMTHts7E2rTm0rvWscO709Cxu8rNt8WhozwvcD4KPHA+uvPD5tPDKnAsKihwJiM0MzsxKaOsKihwJiM0MzsyKcrks/YxLDIsM6OsvLTU2kNyZWF0ZUxpc3S4s7XEJiMyMDU0MDujrMTHts7E2rTm0rvWscO709DKzbfFwcujrMDvw+a05rXEyv2+3dKyw7vT0LjEseSjrMjnufvDu9PQxNq05ta7z+vL/KOsvs274bP2z9bE2rTm0LnCtqGjPC9wPgo8cD6688Pm1NnK5LP2TLXEtdjWt6Os08nT2srHJiMyMDU0MDu0q7Xdo6zL+dLUTMO709C4xLHko6zSwL7JyscwtdjWt6GjPC9wPgo8cD48YnI+CjwvcD4KPHA+z8LD5s7Sw8fTwyDS/dPDtKu13cC0v7S/tKGjPC9wPgo8cD48cHJlIGNsYXNzPQ=="brush:java;">#include
第一二個地址都是L的地址,沒有變化,所以依舊是0地址。後面用malloc函數傳給動態分配內存的首地址,並且由於傳遞了L的實參,L發生了改變,所以三四五地址同為新分配的地址。dispList函數可以正常運行了。