【问题标题】:general array printer function in cc中的通用数组打印机功能
【发布时间】:2021-12-25 14:37:13
【问题描述】:

我有这两个结构:

    typedef struct
    {
        char* name;
        int flightCount;
        Flight** flightArr;
        LIST dateList;
        int flightsSorted;
    
    }Airline;

typedef struct
{
    Airport*    airportsArr;
    int         airportsCount;
}AirportManager;

我需要为这两个数组编写一个通用打印机(一个是结构数组,另一个是指针数组)。

我知道一般的打印机应该是这样的:

void generalArrayFunction(const void* pArr, const int size, int sizeOfElement, void(*printer)(const void*))
{
    for(int i=0;i<size;i++)
    printer((char*)pArr + i * sizeOfElement);
}

它非常适合我使用以下行打印的常规数组:

generalArrayFunction(manager.airportsArr,manager.airportsCount,sizeof(manager.airportsArr[0]),printAirport);

但是对于指针数组,我不能使用相同的逻辑,我不知道我应该做什么。下面的行打印了一个结构,但第二个搞砸了。

generalArrayFunction(*pComp->flightArr, pComp->flightCount, sizeof(pComp->flightArr[0]), printFlight);

有什么建议吗?

【问题讨论】:

    标签: arrays c pointers printing function-pointers


    【解决方案1】:

    如果我的意图是正确的,在这段代码中:

    generalArrayFunction(*pComp->flightArr, pComp->flightCount, sizeof(pComp->flightArr[0]), printFlight);
    

    sizeOfElement 将是指针的大小,因为它是一个指针数组,您需要进行另一个取消引用才能到达结构并获取大小,这就是为什么第一个结构打印正常而后面的不是。 试试这个:

    generalArrayFunction(*pComp->flightArr, pComp->flightCount, sizeof((*pComp->flightArr)[0]), printFlight)
    

    【讨论】:

    • 无法理解您更改的原因,并且效果不佳。
    • @יונתן אליהו 我认为您需要元素的大小才能正确打印 flightArr 所指向的内容,因为 flightArr 是指向指针的指针而不是指向某些元素(例如结构)的指针,尤其是当第一个 srtuct 打印正确(可能是由于在 generalArrayFunction 中 i = 0 时的 i * sizeOfElement),但可能是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多