面试题答案
一键面试#include <stdio.h>
#include <string.h>
struct Data {
int id;
char name[20];
double value;
};
struct Data* findLongestName(struct Data* arr, int length) {
struct Data* longest = arr;
for (int i = 1; i < length; i++) {
if (strlen(arr[i].name) > strlen(longest->name)) {
longest = &arr[i];
}
}
return longest;
}
在上述代码中,findLongestName
函数接受一个指向struct Data
类型结构体数组的指针arr
和数组长度length
。
指针在函数参数传递及处理过程中的关键操作
- 参数传递:通过传递结构体数组的指针
arr
,函数能够访问到数组的起始地址,进而可以访问数组中的每一个元素。这种方式避免了将整个数组拷贝到函数内部,大大提高了效率,尤其是对于大型数组。 - 处理过程:在函数内部,定义一个指针
longest
,初始指向数组的第一个元素。通过for
循环遍历数组,使用strlen
函数比较每个元素的name
字段长度,如果发现更长的name
,则更新longest
指针指向该元素。最后返回longest
指针,它指向name
字段最长的结构体元素。
指针的优势
- 效率提升:避免了大型结构体数组的拷贝,减少了内存开销和时间开销。如果传递的是整个数组,每次函数调用都需要将整个数组复制到函数栈中,对于大型数组这是非常低效的。
- 灵活性:指针可以方便地进行移动和操作,能够灵活地访问数组中的不同元素。例如在上述代码中,可以通过
arr[i]
这样的方式像访问数组一样操作指针指向的内存区域。