繁体   English   中英

如何使用指针将数组结构发送到函数中

[英]How to send an array struct into a function using pointers

如何将结构数组作为参数发送到函数中?
员工变量是一个结构体。
我的功能:

void arraySort(struct Employee *employee[])
{
    bool flag = false;
    for (int i = 0; i < 5000; i++)
    {
        int empID1 = employee[i]->empID;
        int empID2 = employee[i + 1]->empID;
        flag = Employee().compareEmpID(empID1, empID2);
        if (flag == true)
        {
            Employee swap;
            swap = *employee[i + 1];
            *employee[i] = *employee[i + 1];
            *employee[i + 1] = swap;
        }
    }
}

其中调用此函数:

bool Employee::compareEmpID(int empID1, int empID2)
{
    if (empID1 >= empID2)
        return true;
    return false;
}

我试图通过使用员工数组结构作为指针从 main 调用对 arraySorts 函数的调用:

arraySort(*employee);

函数 compareEmpID 必须是 struct employee 中的静态方法,并通过调用Employee::compareEmpID来调用。 您的 arraySort 方法存在一些问题。

  • 您对数字 5000 进行硬编码,这意味着您的数组需要有 5000 个或更多元素,否则您将收到有关非法内存访问的错误。
  • 变量 swap 应该是一个指针,并在 for 循环之外声明。
  • 你的交换逻辑是错误的。

我根据您的代码重写了程序并对其进行了测试。

#include<iostream>

using namespace std;

struct Employee {
    int empID;
    static bool compareEmpID(int empID1, int empID2) {
        return empID1 > empID2;
    }
};

void arraySort(Employee *employees[], int size) {
    bool flag = false;
    Employee *swap;

    for(int i=0; i<size-1; i++) {
        int empID1 = employees[i]->empID;
        int empID2 = employees[i+1]->empID;
        flag = Employee::compareEmpID(empID1,empID2);
        if(flag) {
            swap = employees[i+1];
            employees[i+1] = employees[i];
            employees[i] = swap;
        }
    }
}

int main(int argc, char* args[]) {
    Employee** employee;
    employee = new Employee*[2];
    employee[0] = new Employee;
    employee[0]->empID = 5;
    employee[1] = new Employee;
    employee[1]->empID = 1;
    arraySort(employee, 2);
    cout << "emp[0]: " << employee[0]->empID << endl;
    cout << "emp[1]: " << employee[1]->empID << endl;
    delete employee[0];
    delete employee[1];
    delete[] employee;
    return 0;
}

希望这可以帮助您启动学习进度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM