1 #include<iostream> 2 #include<string.h> 3 #include<algorithm> 4 #define max 0x3f 5 using namespace std; 6 int main() 7 { 8 int b[6]; 9 int a[5][5]; 10 fill(a[0],a[0]+5*5,12); 11 // memset(a,0,sizeof(a)); 12 // memset(a,-1,sizeof(a)); 13 // memset(a,max,sizeof(a)); 14 /*fill對二維數組賦初值,要從a[0]開始,而不是a */ 15 /*而memset對二維或者一維數組賦值只能是賦值為0,-1,max(16進制)*/ 16 // memset(b,0,sizeof(b)); 17 // memset(b,-1,sizeof(b)); 18 // memset(b,max,sizeof(b)); 19 fill(b,b+6,9); 20 cout<<"a數組:\n"; 21 for(int i=0;i<5;i++) 22 { 23 for(int j=0;j<5;j++) 24 { 25 cout<<a[i][j]<<" "; 26 } 27 cout<<endl; 28 } 29 cout<<"b數組:\n"; 30 for(int i:b) 31 { 32 cout<<i<<" "; 33 } 34 cout<<endl; 35 cout<<"下面是c數組:\n"; 36 char c[3][5]; 37 /* 字符數組則可以用memset,fill任意賦值。*/ 38 memset(c,'l',sizeof(c));/* 這里是賦值為'l'*/ 39 fill(c[0]+7,c[0]+8,'8');/* 這里把'8'改為'1',你會發覺c數組好像每一位都一樣。 40 強烈吐槽,'1'和'l'在控制台輸出看不出差別。*/ 41 /* 准確來說,fill賦值是從指定位置開始,然后長度為結束位置減去初始位置。 42 這里就是c[0]+8-c[0]+7=1。所以這里只給c[0]+7這一位賦值。 43 */ 44 for(int i=0;i<3;i++) 45 { 46 for(int j=0;j<5;j++) 47 { 48 cout<<c[i][j]<<" "; 49 } 50 cout<<endl; 51 } 52 }
怎么調試才能看出所有區別和問題所在呢?答案是多多輸出。只有這樣對比着看,才能知道程序運行到哪兒了,和預期差在哪兒,崩在哪了。