MST

星途 面试题库

面试题:C语言指针在复杂函数参数传递中的应用

假设有一个结构体如下:struct Data { int id; char name[20]; double value; }; 编写一个函数,该函数接受一个指向struct Data类型结构体数组的指针以及数组长度,通过指针传递在函数内找到name字段最长的结构体元素,并返回指向该元素的指针。要求写出完整代码,并说明指针在函数参数传递及处理过程中的关键操作与优势。
30.2万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#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

指针在函数参数传递及处理过程中的关键操作

  1. 参数传递:通过传递结构体数组的指针arr,函数能够访问到数组的起始地址,进而可以访问数组中的每一个元素。这种方式避免了将整个数组拷贝到函数内部,大大提高了效率,尤其是对于大型数组。
  2. 处理过程:在函数内部,定义一个指针longest,初始指向数组的第一个元素。通过for循环遍历数组,使用strlen函数比较每个元素的name字段长度,如果发现更长的name,则更新longest指针指向该元素。最后返回longest指针,它指向name字段最长的结构体元素。

指针的优势

  1. 效率提升:避免了大型结构体数组的拷贝,减少了内存开销和时间开销。如果传递的是整个数组,每次函数调用都需要将整个数组复制到函数栈中,对于大型数组这是非常低效的。
  2. 灵活性:指针可以方便地进行移动和操作,能够灵活地访问数组中的不同元素。例如在上述代码中,可以通过arr[i]这样的方式像访问数组一样操作指针指向的内存区域。