我有一个结构数组struct npc sum[arraysize];
,其中每个结构代表一个具有不同整数值的NPC。我想遍历sum[i]
一定次数并调用一个函数:
int performTask(argument???);
该功能应该更新结构中的一些整数(例如用于体验的整数),并返回npc当前具有的体验。
但是,显然我做错了,因为我输入的任何函数都没有保存在数组中。例如,我试图将sum[1]
中包含的结构传递给函数。还要将指针作为参数传递,但也不能使指针起作用。
在此函数中发送以编辑已保存在数组中的结构的适当参数是什么?
或更笼统地说,如何使用函数更新结构数组?
答案 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)