Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在函数中传递结构数组并在C中更改其参数_C_Arrays_Function_Pointers_Struct - Fatal编程技术网

如何在函数中传递结构数组并在C中更改其参数

如何在函数中传递结构数组并在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

我试图访问结构数组中的项,并更改函数中的值。我创建了一个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 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
,一个typedef
server
和一个名为
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