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 }
怎么调试才能看出所有区别和问题所在呢?答案是多多输出。只有这样对比着看,才能知道程序运行到哪儿了,和预期差在哪儿,崩在哪了。