1. 代码A的调试实验
1.1 变量监视
(1)断点调试监控
在Dev c++中在第28行设置断点,进行调试,将代码A中所示变量进行监视并将数据初始值记录在表一中
表1 数据初始值表(在第一个for循环执行前,监控到的各个变量值)
变量/常量名 | 监视值 | 变量/常量名 | 监视值 | 变量/常量名 | 监视值 | 变量/常量名 | 监视值 |
---|---|---|---|---|---|---|---|
a | { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}} | p | (int (*)[4]) 0x65fdd0 | *p | {1, 2, 3, 4} | *a | {1, 2, 3, 4} |
a[0] | {1, 2, 3, 4} | p[0] | {1, 2, 3, 4} | *(p+0) | {1, 2, 3, 4} | *(a+0) | {1, 2, 3, 4} |
a[1] | {5, 6, 7, 8} | p[1] | {5, 6, 7, 8} | *(p+1) | {5, 6, 7, 8} | *(a+1) | {5, 6, 7, 8} |
a[3] | {13, 14, 15, 16} | p[3] | {13, 14, 15, 16} | *(p+3) | {13, 14, 15, 16} | *(a+3) | {13, 14, 15, 16} |
&a[0][0] | (int *) 0x65fdd0 | p[0]+0 | (int *) 0x65fdd0 | *p+0 | (int *) 0x65fdd0 | *a | {1, 2, 3, 4} |
&a[0][1] | (int *) 0x65fdd4 | p[0]+1 | (int *) 0x65fdd4 | *p+1 | (int *) 0x65fdd4 | *a+1 | (int *) 0x65fdd4 |
---|---|---|---|---|---|---|---|
&a[0][2] | (int *) 0x65fdd8 | p[0]+2 | (int *) 0x65fdd8 | *p+2 | (int *) 0x65fdd8 | *a+2 | (int *) 0x65fdd8 |
&a[0][3] | (int *) 0x65fddc | p[0]+3 | (int *) 0x65fddc | *p+3 | (int *) 0x65fddc | *a+3 | (int *) 0x65fddc |
&a[1][0] | (int *) 0x65fde0 | p[1]+0 | (int *) 0x65fde0 | *p+4 | (int *) 0x65fde0 | *a+4 | (int *) 0x65fde0 |
&a[1][1] | (int *) 0x65fde4 | p[1]+1 | (int *) 0x65fde4 | *p+5 | (int *) 0x65fde4 | *a+5 | (int *) 0x65fde4 |
&a[1][2] | (int *) 0x65fde8 | p[1]+2 | (int *) 0x65fde8 | *p+6 | (int *) 0x65fde8 | *a+6 | (int *) 0x65fde8 |
&a[1][3] | (int *) 0x65fdec | p[1]+3 | (int *) 0x65fdec | *p+7 | (int *) 0x65fdec | *a+7 | (int *) 0x65fdec |
&a[2][0] | (int *) 0x65fdf0 | p[2]+0 | (int *) 0x65fdf0 | *p+8 | (int *) 0x65fdf0 | *a+8 | (int *) 0x65fdf0 |
a[0][0] | 1 | *p[0] | 1 | **p | 1 | *a[0] | 1 |
a[0][1] | 2 | *(p[0]+1) | 2 | *(*p+1) | 2 | *(a[0]+1) | 2 |
a[0][3] | 4 | *(p[0]+3) | 4 | *(*p+3) | 4 | *(a[0]+3) | 4 |
a[1][0] | 5 | p[1][0] | 5 | *(*p+4) | 5 | *(a[0]+4) | 5 |
根请据表1监控到的数据,分析变量p的特点,类比表1的形式,将表2补充填写完毕;
表2 数据初始值表(在第一个for循环执行前,监控到的各个变量值)
变量/常量名 | 监视值 | 变量/常量名 | 监视值 | 变量/常量名 | 监视值 | 变量/常量名 | 监视值 |
---|---|---|---|---|---|---|---|
a | <不用填> | p | <不用填> | *p | <不用填> | *a | <不用填> |
a[3][0] | 13 | p[3][0] | 13 | *(*(p+3)+0) | 13 | *(*(a+3)+0) | 13 |
a[3][1] | 14 | p[3][1] | 14 | *(*(p+3)+1) | 14 | *(*(a+3)+1) | 14 |
a[3][2] | 15 | p[3][2] | 15 | *(*(p+3)+2) | 15 | *(*(a+3)+2) | 15 |
a[3][3] | 16 | p[3][3] | 16 | *(*(p+3)+3) | 16 | *(*(a+3)+3) | 16 |
(2)在语句"int *q = a[0];"后插入以下代码
尝试在语句"int *q = a[0];"后插入以下代码,看程序是否能够正常编译,如果无法编译,报什么错误。
…
int b[4][4] = {
{
9,19,29,39},{
8,18