c++数组初始化赋值

 纸上得来终觉浅,绝知此事要躬行。
 1 #include<iostream>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 int main()
 6 {
 7     int a[5];
 8     memset(a,257,20);//257,随便填吧,因为对一个字节复赋值,多了也会溢出的。257%256 
 9     /*
10     67372036 67372036 67372036 67372036 67372036
11     因为0x4040404 = 67372036
12     memset,从一个地址开始,对连续20个字节,每个字节都设置为4。
13     所以,memset对大小为1个字节的数据类型分配比较靠谱,int一般为4字节,所以
14     并非是对一个int分配为4 
15     */
16     for(int i=0;i<5;i++)
17     {
18         cout<<a[i]<<" ";
19     }
20     cout<<endl;
21     int b[5];
22     memset(b,0,sizeof(b));
23     fill(b+2,b+3,1000); 
24     /*
25     0 0 1000 0 0,有次可知,fill是从一个起始位置分配1000到终点位置(终点位置不会分配),这个对比memset就是
26     考虑了数组的数据类型,对一整个int赋值为1000 
27     */
28     for(int i=0;i<5;i++)
29     {
30         cout<<b[i]<<" ";
31     }
32     cout<<endl;
33     
34     int c[5][5];
35     memset(c[0],0,100);
36     memset(c[0],4,52);
37     /*
38     67372036 67372036 67372036 67372036 67372036
39     67372036 67372036 67372036 67372036 67372036
40     67372036 67372036 67372036        0        0
41        0        0        0        0        0
42        0        0        0        0        0
43     二维数组起始也没什么需要主要的,唯一的就是起始地址为c[0]不是c了。 
44     */
45     for(int i=0;i<5;i++)
46     {
47         for(int j=0;j<5;j++)
48         {
49             printf("%8d ",c[i][j]);
50         }
51         cout<<endl;
52     } 
53     cout<<endl;
54     int d[5][5];
55     fill(d[0],d[0]+5*5,66); 
56     /*
57     66 66 66 66 66
58     66 66 66 66 66
59     66 66 66 66 66
60     66 66 66 66 66
61     66 66 66 66 66
62     这个也是注意起始地址即可。 
63     */
64     for(int i=0;i<5;i++)
65     {
66         for(int j=0;j<5;j++)
67         {
68             printf("%2d ",d[i][j]);
69         }
70         cout<<endl;
71     } 
72     cout<<endl;
73 }

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

原文地址:https://www.cnblogs.com/dayq/p/11949351.html