函数以编辑结构数组的参数

时间:2018-10-09 22:09:37

标签: c

我有一个结构数组struct npc sum[arraysize];,其中每个结构代表一个具有不同整数值的NPC。我想遍历sum[i]一定次数并调用一个函数:

int performTask(argument???);

该功能应该更新结构中的一些整数(例如用于体验的整数),并返回npc当前具有的体验。

但是,显然我做错了,因为我输入的任何函数都没有保存在数组中。例如,我试图将sum[1]中包含的结构传递给函数。还要将指针作为参数传递,但也不能使指针起作用。

在此函数中发送以编辑已保存在数组中的结构的适当参数是什么?

或更笼统地说,如何使用函数更新结构数组?

2 个答案:

答案 0 :(得分:0)

int performTask(struct npc**sums)
{
// to hit sums 5
    sums[5]->thingy = 42;
}

请注意,您还必须传入size参数。无法确定performTask

中数组的大小

答案 1 :(得分:0)

如果您需要传递一个struct数组(或任何东西的数组),只需传递一个指针即可。访问时将数组转换为指针 1

唯一的警告是,如果您将链接列表的地址传递给可能更改列表地址的函数(在这种情况下,您必须传递指针的 address ,以便列表地址如果第一个节点已更改,则可能会更改)

否则,在您的情况下,只要在传递给函数之前已为结构数组分配了存储,只需传递指针就可以了,例如

#include <stdio.h>

#define NS 4

typedef struct {    /* structure */
    int a, b;
} ints;

void change (ints *s)   /* function taking pointer to struct */
{
    for (int i = 0; i < NS; i++)
        s[i].a = i+1, s[i].b = i+1;
}

int main (void) {

    ints arr[NS] = {{0}};   /* array of struct initialized zero */

    change (arr);           /* passed to function */

    for (int i = 0; i < NS; i++)    /* changes output */
        printf ("arr[%d]: (%d, %d)\n", i, arr[i].a, arr[i].b);
}

使用/输出示例

$ ./bin/structpass
arr[0]: (1, 1)
arr[1]: (2, 2)
arr[2]: (3, 3)
arr[3]: (4, 4)

脚注:

[1] C11 Standard - 6.3.2.1 Other Operands - Lvalues, arrays, and function designators(p3)