对C typedef结构的一般误解,以及与指针的关系
我想我对如何在C语言中声明structs和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
#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年了,所以我很惭愧犯了这么一个小错误。