如何在函数中传递结构数组并在C中更改其参数
我试图访问结构数组中的项,并更改函数中的值。我创建了一个struct数组,并尝试传入函数initialize,在其中更改值。但我不知道如何通过主要功能的变化 代码是:如何在函数中传递结构数组并在C中更改其参数,c,arrays,function,pointers,struct,C,Arrays,Function,Pointers,Struct,我试图访问结构数组中的项,并更改函数中的值。我创建了一个struct数组,并尝试传入函数initialize,在其中更改值。但我不知道如何通过主要功能的变化 代码是: #include <stdio.h> #include <stdlib.h> #define Q_LIMT 100 typedef struct servers { int id; int num_in_Q; int server_status; }server; void in
#include <stdio.h>
#include <stdlib.h>
#define Q_LIMT 100
typedef struct servers
{
int id;
int num_in_Q;
int server_status;
}server;
void initialize(server *servers);
int main()
{
server servers[2];
initialize(servers);
printf("server[%d].id = %d\n",servers[0].id);
printf("server[%d].num_in_Q = %d\n",servers[0].num_in_Q);
printf("server[%d].server_status = %d\n",servers[0].server_status);
return 0;
}
void initialize(server *servers)
{
int i=0,j=0;
for(i=0; i<2; i++) {
servers[i].id = i;
servers[i].num_in_Q = 0;
servers[i].server_status = 0;
}
#包括
#包括
#定义Q_LIMT 100
typedef结构服务器
{
int-id;
int num_in_Q;
int server_状态;
}服务器;
无效初始化(服务器*服务器);
int main()
{
服务器服务器[2];
初始化(服务器);
printf(“服务器[%d].id=%d\n”,服务器[0].id);
printf(“服务器[%d].num\u in\u Q=%d\n”,服务器[0].num\u in\u Q);
printf(“服务器[%d]。服务器\u状态=%d\n”,服务器[0]。服务器\u状态);
返回0;
}
无效初始化(服务器*服务器)
{
int i=0,j=0;
for(i=0;i您的程序几乎成功了。在void initialize(SERVER*s)
对变量和结构的名称使用相同的名称会造成混淆。
最好避免
print
函数中的严重问题是无法看到正确的结果。您使用了两次格式化%d
,只提供了一个变量
。我猜您的目的是打印serv[2]
数组。这可以在for
循环中轻松完成
这是修改后的程序。我更改了初始化函数,以便您可以看到元素已正确初始化
#include <stdio.h>
#include <stdlib.h>
#define Q_LIMT 100
typedef struct servers
{
int id;
int num_in_Q;
int server_status;
}SERVER;
void initialize(SERVER *s);
void initialize(SERVER *s)
{
int i=0,j=0;
for(i=0; i<2; i++) { //i=0; i=1
s[i].id = i; // 0, 1
s[i].num_in_Q = i*i + 1; // 1, 2
s[i].server_status = i+i + 2; // 2, 4
} // the bracket was missing
}
int main()
{
int i;
SERVER serv[2];
initialize(serv);
for(i=0; i<2; i++) {
printf("server[%d].id = %d\n", i, serv[i].id);
printf("server[%d].num_in_Q = %d\n", i, serv[i].num_in_Q);
printf("server[%d].server_status = %d\n\n", i, serv[i].server_status);
}
return 0;
}
此代码缺少某些内容,}
至少如此。这是完整的代码吗?请记住,如果您稍后在文件中声明函数,则无需事先声明方法签名,您可以在首次使用之前移动该定义。servers
不是变量,而是结构。server
不是变量,而是typedef
alias.您至少需要使用堆栈分配或malloc
声明一个适当的servers
数组。我的建议是,您删除initialize
函数中的所有代码,然后让您的代码在没有任何警告或错误的情况下进行编译。您的代码中有太多问题,您无法避免甚至可以讨论初始化
函数中应该包含的内容。如果您使用gcc
或clang
进行编译,请使用-Wall
选项并清除所有警告。您实现了它,因此不清楚您的问题是什么。可能是它没有编译吗?现在,一些人建议:您已经完成了一个结构servers
,一个typedefserver
和一个名为servers
的局部变量。不要这样做,你自己会感到困惑。这不是很有创意,但是调用结构server\u info
并调用相同的typedef。然后,对数组使用servers
不会与类型混淆。
server[0].id = 0
server[0].num_in_Q = 1
server[0].server_status = 2
server[1].id = 1
server[1].num_in_Q = 2
server[1].server_status = 4