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