在 C++ 中使用结构数组作为参数

using struct array as parameter in c++

我在构建这个时遇到了问题:

#include <stdio.h>
#include <conio.h>
#define N 3

struct cliente
{
    char nocliente[12];
    int edad;
    int precio;        
};

void imprimir(cliente *cliente1[N]);

int main()
{
    struct cliente cliente1[N];
    for(int i=0; i<N; i++)
    {
        printf("\nIngrese el nombre del cliente %d\n", i+1);
        scanf("%s", &cliente1[i].nocliente);
        printf("\nIngrese la edad del cliente %d\n", i+1);
        scanf("%d", &cliente1[i].edad);
        printf("\nIngrese el precio del articulo del cliente %d\n",  i+1);
        scanf("%d\n", &cliente1[i].precio);
    }

    imprimir(&cliente1[N]);

    getch();
    return 0;
}

void imprimir(cliente *cliente1[N])
{
    for(int i=0; i<N; i++)
    { 
        printf("%s", cliente1[i]->nocliente);
        printf("\n%d", cliente1[i]->edad);
        printf("\n%d", cliente1[i]->precio);
    }
}

这是编译器输出的错误:

cannot convert `cliente*` to `cliente**` for argument `1` to `void imprimir(cliente**)`

我试过在原型和定义的参数中声明 (cliente *cliente[]) 但函数也不起作用

改用以下内容:

void imprimir(cliente *cliente1)

用于函数声明。

更改...

imprimir(&cliente1);//you are passing the whole thing not just #3


void imprimir(cliente *cliente1) //drop the N
  • 正确(且令人困惑)的语法是

    void imprimir(/* const */ cliente (&cliente1)[N]);
    

    然后调用它

    imprimir(cliente1);
    
  • 更简单的语法:

    void imprimir(/* const */ cliente *cliente1, std::size_t size);
    

    来电

    imprimir(cliente1, N);
    
  • 使用 class 可能会有所帮助,因为 std::vectorstd::array

    std::array<cliente, N> cliente1;
    imprimir(/* const */ std::array<cliente, N>& cliente1);
    

    并称之为

    imprimir(cliente1);
    

注意:我在注释中添加了const,因为数组没有被修改。