在c ++中使用struct array作为参数

时间:2015-07-06 02:13:28

标签: c++ function pointers struct parameters

我在构建这个时遇到了麻烦:

#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[])但是函数但它不起作用

3 个答案:

答案 0 :(得分:0)

请改用以下内容:

void imprimir(cliente *cliente1)

用于您的函数声明。

答案 1 :(得分:0)

更改为...

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


void imprimir(cliente *cliente1) //drop the N

答案 2 :(得分:0)

  • 正确(且令人困惑)的语法是

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

    然后调用它

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

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

    通过电话

    imprimir(cliente1, N);
    
  • 使用课程可能有助std::vectorstd::array

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

    并称之为

    imprimir(cliente1);
    

注意:我在评论中添加了const,因为数组未被修改。