龙空技术网

C语言快速入门——数组与调试进阶

glimix 382

前言:

眼前姐妹们对“c语言调试断点”可能比较看重,我们都想要学习一些“c语言调试断点”的相关资讯。那么小编同时在网络上搜集了一些关于“c语言调试断点””的相关资讯,希望同学们能喜欢,咱们快快来学习一下吧!

由ASCII码表的输出程序,我们可以认识到使用循环语句处理一组连续的数据有着巨大的优势。在更普遍的情况下,数据由一组离散的数值组成,如一组学生的考试成绩。对于这些数据的处理,有效的方式是使用循环。但前提是数据可以在循环中有序的访问。ASCII码表输出程序中,循环变量i与ASCII码相对应,对于学生成绩这样的数据,需要将其放入一个容器中,以便达到连续访问的目的,这个容器可以使用数组来实现。

定义数组变量

定义一个整型变量的语句如下: int a; 浮点数为: float b; 由此可以看出定义一个变量的通用语法是:类型 变量名;

数组是一种容器,定义时自然要表现出容器与单个变量的区别,这由下标运算符指示[],即: 类型 数组名[元素个数];

int age[5]; // 存储5个年龄值的int数组float score[25]; // 存储25个成绩值的float数组char letter[23]; // 存储23个字符的char数组

定义数组时,元素的个数不能为零,且必须是一个常量值。也可以在定义的同时使用数据进行初始化。初始化使用{}语句,数据之间用’,’隔开。

数组的特性数组是存放同一类型数据的集合:如age数组只存储整型, score存储浮点数。数组中的所有元素的在内存中是连续存储的。数组元素的访问采用下标运行算[]:第一个元素的索引为0,最后一个元素的索引为(N-1)

下面的程序使用下标运算符访问与修改数组元素

越界

当使用循环语句访问数组时,重要的一点就是保证元素访问不会越界。如下程序中ia只有5个元素,最后一个元素的下标是4,值为a[4]。如果你不心超出了元素范围,那程序的行为将是不确定的。C语言不保证范围的有效性检查,这一点得由我们来保障。

求平均值

现在回到我们提到的求学生平均成绩的问题,只是我们将数据类型改变一下,原始成绩变为整型数组存储。

变量sum用于存储总成绩,被初始化为0值。这是必须的,因为未初始化的值是不确定的。循环体执行完成后,总成绩为551,7位学生的平均成绩为78。有个问题需要思考一下,算术中551/7的平均值是带有小数部分的,这里为什么没有?

现在试着将学生数增大到9,除了在数组中增加成绩部分外,你还需要修改个数7为9,这在代码中有3处地方。如果学生人数再次变化,这显然是个问题。你可能想到了类似下面的代码来解决这个问题,但不幸运的是,这是错误的。

// 定义num维护数组元素个数int num = 3;  // 可是这是错的:元素个数必须是一个常量值。int score[num] = { 1, 2, 3 };

类似于9这样的字面数据在这里称为魔数,解决的方法是把它常量化,这可以使用#define实现,我们在后面会进行讲解。

调试

这一节调试的目的是让我们掌握主动观察变量的方法,同时引出数据在内存中的组织方式,希望能引起你的思考。我们使用下面这个简单的程序作为测试用例。如果你对调试方法没有太多掌握,可以参看我以前的文章:《C语言快速入门——调试基础》

1:如图输入代码并设置断点

2:按下F5启动调试,这时程序进入第一个断点处。

3:依次【调试】菜单下的【窗口】【监视】【监视1】,弹出监视1窗口。

4:依次【调试】菜单下的【窗口】【内存】【内存1】,弹出内存1窗口。

5:监视数组score

方法a:在【监视1】窗口中,点击名称下的单元格,输入数组名score。方法b:或者用鼠标拖动源代码中的score名称到【监视1】窗口中。

6:观察数组score的内存:把score名称拖动到内存1的地址栏处

此时注意观察以下几点:

1:【监视1】窗口中数组的5个元素值为-858993460,表示的是无效值。score的值是0x010FFD20,这是一个内存地址值,在C语言中代表指针的值。

2:【内存1】窗口中地址也是0x010FFD20,这表示这个地址是数组的起始地址,这里到后面一段值全是0xcc。注意:此窗口中的地址部分是可以手动输入的,现在你知道了数组score的地址,也可以手动输入试试,输入完成后要按回车。当然,拖变量进去还是容易一些。

7:按下F5,为数组第一个元素赋值1。

注意【监视1】窗口中值的变化,尤其是注意【内存1】窗口中数值的变化,有4个字节的值变为了红色,这表示在当前环境下存储1个int型值需要4个字节的空间。同时要注意这4个字节的存储顺序,01 00 00 00,而不是 00 00 00 01,这代表在当前系统下,低位字节的数据存储在前面。

8:直接修改数值。

继续按下F5,同上类似,这时程序运行到return 0处,你可以在【监视1】窗口中,在【值】列选中数组第5个元素,如下图将值直接修改为5。虽然代码中没有为第5个元素赋值的语句,但我们却更改了数组元素的值。同时注意【内存1】窗口中也有同等的变化。这种技巧在实际调试时相当有用,可以用于动态的将数值更改为需要测试的值,发现程序BUG等,因此需要掌握此技巧。

好了,这节内容已经码字相当多了,在掌握数组基础知识的基础上,尤其要熟悉这里的调试手段。接下来要介绍求平均值例子中引出的魔数问题,即使用#define定义常量代替字面常量。

标签: #c语言调试断点