在 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::vector
或 std::array
std::array<cliente, N> cliente1;
imprimir(/* const */ std::array<cliente, N>& cliente1);
并称之为
imprimir(cliente1);
注意:我在注释中添加了const
,因为数组没有被修改。
我在构建这个时遇到了问题:
#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::vector
或std::array
std::array<cliente, N> cliente1; imprimir(/* const */ std::array<cliente, N>& cliente1);
并称之为
imprimir(cliente1);
注意:我在注释中添加了const
,因为数组没有被修改。