【问题标题】:How to pass an array of struct in a function and change its arguments in C如何在函数中传递结构数组并在 C 中更改其参数
【发布时间】:2018-06-23 00:07:09
【问题描述】:

我正在尝试访问结构数组中的项目并更改函数中的值。我创建了一个结构数组,并尝试在函数初始化中传递我更改值的位置。但是我不知道如何在 main 中传递函数的变化。

代码是:

#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;

 }

【问题讨论】:

  • 这段代码缺少一些东西,至少是}。这是完整的代码吗?请记住,如果您稍后在文件中声明函数,则不需要提前声明方法签名,您可以在第一次使用之前移动该定义。
  • servers 不是变量,而是结构。 server 不是变量,它是 typedef 别名。您至少需要使用堆栈分配或malloc 声明一个正确的servers 数组。
  • 我的建议是您删除initialize 函数中的所有代码,然后让您的代码在没有任何警告或错误的情况下进行编译。您的代码中有很多问题,以至于您甚至无法谈论initialize 函数中应该包含的内容。如果您使用gccclang 进行编译,请使用-Wall 选项并清除所有警告。
  • 你实现了它,所以不清楚你的问题是什么。也许它没有编译?现在,有人建议:你有一个结构 servers、一个 typedef server 和称为 servers 的局部变量。不要那样做,你自己会糊涂的。不是很有创意,但是调用结构server_info和调用typedef一样。这样,数组使用servers就不会和类型混淆了。

标签: c arrays function pointers struct


【解决方案1】:

您的程序几乎成功了。在 void initialize(SERVER *s) 中缺少一个结束 for 循环的括号

变量名和结构体名使用同名容易混淆。 最好避开它。

print 函数中的严重问题是阻止您看到正确的结果。您使用了两次格式化%d 并且只提供了one variable。我猜你的意图是打印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;
}

输出:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2018-09-17
    • 2020-12-17
    相关资源
    最近更新 更多