对C typedef结构的一般误解,以及与指针的关系

对C typedef结构的一般误解,以及与指针的关系,c,pointers,gcc,struct,typedef,C,Pointers,Gcc,Struct,Typedef,我想我对如何在C语言中声明structs和typedef感到非常困惑。我已经读了一遍——根据答案,我所做的应该是正确的。我试图声明一个简单的类型(目前基本上只是一个向量),并将其与指针一起使用,但出现了一些非常错误的情况,我不断得到错误(包括命令在内的其他编译器输出): 我的代码如下: #include <stdlib.h> typedef struct agent_s { float x; float y; }agent; void init_agent(age

我想我对如何在C语言中声明structs和typedef感到非常困惑。我已经读了一遍——根据答案,我所做的应该是正确的。我试图声明一个简单的类型(目前基本上只是一个向量),并将其与指针一起使用,但出现了一些非常错误的情况,我不断得到错误(包括命令在内的其他编译器输出):

我的代码如下:

#include <stdlib.h>

typedef struct agent_s
{
    float x;
    float y;
}agent;

void init_agent(agent *a)
{
    a->x = (float)(rand()%100)/10;
    a->y = (float)(rand()%100)/10;
}

int main(int argc, char** argv)
{
    int agent_count = 10;
    agent* agent_list = malloc(sizeof(agent)*agent_count);
    for(int i = 0;i<agent_count;i++)
        init_agent(agent_list[i]);

    return 0;
}
#包括
类型定义结构代理
{
浮动x;
浮动y;
}代理人;
无效初始代理(代理*a)
{
a->x=(浮动)(rand()%100)/10;
a->y=(浮动)(rand()%100)/10;
}
int main(int argc,字符**argv)
{
int agent_计数=10;
代理人*代理人名单=malloc(代理人人数)*代理人人数);

对于(int i=0;i订阅运算符,
[]
取消引用指针。您需要的是

init_agent(&agent_list[i]);
或同等品

init_agent(agent_list + i);

i、 e.
i
th项的地址,而不是结构本身。

subscription操作符取消引用指针。您需要的是

init_agent(&agent_list[i]);
或同等品

init_agent(agent_list + i);

i、 e.列表中第i项的地址,而不是结构本身。

代理列表[i]
是一个
代理
。函数需要一个
代理*
。Pass
代理列表[i]
代理列表[i]
是一个
代理
。函数需要一个
代理*
。传递
代理列表[i]
.P-我也意识到了这一点,谢谢!但我认为这里真正的问题是我是个白痴,我需要睡觉。@AdamHarries只是小睡一下:P我很惊讶看到你犯了这个错误,因为你的代码看起来更干净、更有条理(缩进、正确使用
malloc()
,等等)比一个会犯这样一个错误的典型初学者还要糟糕。我现在已经做到了。谢谢你的夸奖!我断断续续地使用C语言已经有5年了,所以我为犯了这样一个小错误感到非常羞愧。是的,我刚刚意识到这一点,谢谢!不过我认为真正的问题是我是个白痴,我需要一些睡眠。@AdamHarries只是小睡一会儿:P我很惊讶看到您犯了这个错误,因为您的代码看起来更干净、更有条理(缩进、正确使用
malloc()
,等等)比一个会犯这样一个错误的典型初学者要好。我现在已经做了。谢谢你的夸奖!我断断续续地使用C已经有5年了,所以我很惭愧犯了这么一个小错误。