C语言程序设计:指针在函数参数中的错误案例分析

版权申诉
0 下载量 51 浏览量 更新于2024-08-22 收藏 336KB PDF 举报
"哈尔滨工业大学的苏小红教授通过一个错误案例分析了指针变量作为函数参数在C语言程序设计中的应用。此案例涉及到查找数组中最高分数及其对应的学生编号。" 在C语言中,指针是一种强大的工具,可以用来传递和修改函数参数的值。在本案例中,讨论的主题是使用指针变量作为函数参数来计算数组中的最高分和对应的学号。程序的目标是读取N个学生的信息,包括学号(long类型)和分数(int类型),然后找出最高分及其对应的学号。 代码首先定义了一个`FindMax`函数,它接受两个整型数组(score[]和num[])和两个整型及长整型变量的地址(pMaxScore和pMaxNum)。然而,在`main`函数中,当调用`FindMax`函数时,没有初始化`maxScore`和`maxNum`变量,这导致编译器发出警告,因为它们可能包含未定义的值。 在`FindMax`函数内部,`pMaxScore`被初始化为数组`score`的第一个元素,然后遍历数组,如果发现更高的分数,就更新`pMaxScore`和`pMaxNum`。这里的`pMaxScore`和`pMaxNum`实际上是指针,因此在函数内部的改变会影响到调用函数时传入的变量。 但是,当在`main`函数中打印`maxScore`和`maxNum`时,它们的值并未正确显示,这是因为`FindMax`函数虽然改变了指针指向的值,但在调用函数后,这些更改并未体现在`main`函数中的原始变量上。这表明在调用`FindMax`时,应将`maxScore`和`maxNum`的地址传递,而不是它们的值。 正确的调用方式应该是: ```c FindMax(score, num, n, &maxScore, &maxNum); ``` 这样,`FindMax`函数可以通过指针修改`main`函数中的`maxScore`和`maxNum`。最后,正确地输出最高分和对应的学号。 这个错误案例强调了在使用指针作为函数参数时,理解指针的工作原理以及如何正确传递和修改指针所指向的值的重要性。在编程时,一定要确保所有变量在使用前都已初始化,并且清楚地了解参数传递的方式(按值传递还是按引用传递)。