C 用于编辑结构数组的函数的参数

C 用于编辑结构数组的函数的参数,c,C,我有一个结构数组struct npc sum[arraysize],其中每个结构表示具有不同整数值的NPC。我想循环使用sum[I]一组次数并调用一个函数: int性能任务(参数 这个函数应该更新结构中的一些整数(比如一个用于经验的整数),并返回npc当前拥有的经验 但是,我显然做错了,因为我在函数中输入的任何内容都不会保存在数组中。例如,我尝试将sum[1]中包含的结构传递到函数中。也可以将指针作为参数传递,但也无法使其起作用 为了编辑数组中已保存的结构,此函数中要发送的正确参数是什么 或者更

我有一个结构数组
struct npc sum[arraysize],其中每个结构表示具有不同整数值的NPC。我想循环使用
sum[I]
一组次数并调用一个函数:

int性能任务(参数

这个函数应该更新结构中的一些整数(比如一个用于经验的整数),并返回npc当前拥有的经验

但是,我显然做错了,因为我在函数中输入的任何内容都不会保存在数组中。例如,我尝试将
sum[1]
中包含的结构传递到函数中。也可以将指针作为参数传递,但也无法使其起作用

为了编辑数组中已保存的结构,此函数中要发送的正确参数是什么

或者更一般地说,如何使用函数更新结构数组

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

请注意,您还必须传入一个size参数。在
performTask

中无法确定数组的大小。如果需要传递结构数组(或任何数组),只需传递指针即可。数组在访问时转换为指针1

唯一需要注意的是,如果将链表的地址传递给一个函数,该函数的列表地址可能会更改(在这种情况下,必须传递指针的地址,以便在第一个节点更改时列表地址可能会更改)

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

#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);
}
脚注:


[1]

发布代码,即使代码不起作用,也会更容易提供帮助。请给出代码示例,并阅读如何在C中通过引用传递元素。请阅读、阅读和。非常感谢。好像我离这里不远,不知道你可以用这样的指针进行迭代。非常迅速和彻底的回答!请记住,当使用作为指针传递的结构数组时,
[…]
充当指针的解引用。因此,如果将结构数组作为
struct foo*arr
传递,则
arr[i]
是指针的一个解引用,离开类型
struct foo
,需要使用
(点)操作符来访问成员,而不是在解引用指向结构的指针时使用的
'->'
(箭头操作符)。
[…]
已经作为这里的解引用。
$ ./bin/structpass
arr[0]: (1, 1)
arr[1]: (2, 2)
arr[2]: (3, 3)
arr[3]: (4, 4)