今天寫一個簡單的線性表時,用Mingw中的g++編譯、調試、運行時發現一個奇怪的現象:程序的執行順序與實際編寫順序不一致。數組
編譯環境:代碼編寫 win7下 editplus + Mingw 4.3.3 + g++app
代碼片斷以下:ide
1 //function: create a list 2 //time:2013-11-8 23:38 3 //filename:list_01.cpp 4 //author :alex 5 #include <stdio.h> 6 #define MAXSIZE 20 //存儲空間初始大小 7 #define OK 1 //success 8 #define ERROR 0 // failed 9 #define TRUE 1 10 #define FALSE 0 11 typedef int Status;// 返回函數結果狀態 12 typedef int ElemType;//int 型 ElemType 13 //定義線性表的結構體 14 typedef struct 15 { 16 ElemType data[MAXSIZE];//data[20] 17 int length;//線性表當前長度 18 }SqList; 19 //初始化鏈表0 20 Status InitList(SqList *L) 21 { 22 L->length=0;//指定長度爲0 23 printf("初始化完成...\n"); 24 return OK; 25 } 26 //打印出鏈表的內容 27 Status PrintList(SqList *L) 28 { 29 if(L->length > 0) 30 { 31 printf("鏈表元素以下:\n"); 32 for(int i=0;i < L->length;i++) 33 printf("%d\t",L->data[i]); 34 return OK; 35 } 36 else 37 { 38 printf("L.length=%d",L->length); 39 return ERROR; 40 } 41 } 42 //取元素 O(1) 43 Status GetElem(SqList L,int i,ElemType *e) 44 { 45 if(L.length==0 || i<1 || i>L.length) 46 return ERROR; 47 *e=L.data[i-1];//直接取值data[i-1] 48 return OK; 49 } 50 //插入數據 爲i第幾個元素位置,從1開始 O(n) 51 Status ListInsert(SqList *L,int i,ElemType e) 52 { 53 int k; 54 if(L->length==MAXSIZE) //判斷滿否 55 return ERROR; 56 if(i<1 || i> L->length+1) //超出範圍 57 return ERROR; 58 if(i< L->length) 59 { 60 for(k=L->length-1;k>=i-1;k--) 61 //將要插入位置後的數據元素向後移動一位 62 L->data[k+1]=L->data[k]; 63 } 64 L->data[i-1]=e;//插入新元素 65 L->length++; //線性表長度+1 66 return OK; 67 } 68 //刪除數據 刪除第i個位置元素,用e返回其值 O(n) 69 Status ListDelete(SqList *L,int i,ElemType *e) 70 { 71 int k; 72 if(L->length==0)//線性表爲空 73 return ERROR; 74 if(i<1 || i> L->length)//刪除位置超出 75 return ERROR; 76 *e=L->data[i-1]; //i位置元素取出 77 if(i< L->length) //位置適當 78 { 79 for(k=i;k < L->length;k++) 80 L->data[k-1]==L->data[k]; 81 } 82 L->length--; 83 return OK; 84 } 85 int main(int argc, char *argv[]) 86 { 87 int i,j,k; 88 printf("This is a list_demo:\n"); 89 SqList list; 90 //初始化鏈表list長度爲5 91 InitList(&list); 92 //數組長度與鏈表長度的關係??? 93 //回顯 94 printf("list.length=%d \n",list.length); 95 //插入元素 96 97 printf("插入5個元素\n"); 98 /* 99 for(i=0;i<5;i++) 100 { 101 scanf("%d",&k); 102 ListInsert(&list,i+1,k); 103 } 104 */ 105 i=0; 106 while (i<5) 107 { 108 scanf("%d",&k); 109 ListInsert(&list,i+1,k); 110 i++; 111 } 112 PrintList(&list); 113 return 0; 114 }
截圖輸出 須要先輸入以後才執行main函數開始部分,奇怪哉???函數
然而在gdb調試輸出時,卻又是正確的,見下:spa
問題是怎樣產生的尚不明確,猜想與Mingw下g++編譯器有關,尚待調查中。。。。調試