指针和结构问题

时间:2015-11-30 07:48:54

标签: c pointers struct

函数find_young()必须接收指针p作为实际参数。 并且p必须指出一个struct s,其中有最年轻的人。 没有错误消息,但程序不起作用。 请给我一些建议。

typedef struct
{
    char *name;
    int age;
} PERSON;

void find_young(PERSON **ip)
{
    PERSON s[3] = {{"John", 25}, {"Brandon", 28}, {"Alex", 30}};
    int i;
    int min = s[0].age; 
    for(i = 0; i < 3; i++)
    {
        if(min > s[i].age)
            **ip = s[i];
    }
}

int main()
{
    PERSON *p;
    find_young(&p);
    printf("The youngest person is %s.\n", p->name);
}

2 个答案:

答案 0 :(得分:2)

您需要在代码中进行一些更改才能使其正常工作

1)您需要为struct和结构中的char* name分配内存

int main()
{
    PERSON *p = malloc(sizeof(PERSON));
    p->name = malloc(100);
    find_young(&p);
    printf("The youngest person is %s with age %d.\n", p->name, p->age);

    free(p->name);
    free(p);
}

<小时/> 2)然后,您需要将nameage值复制到正确传递的struct

void find_young(PERSON **ip)
{
    PERSON s[3] = {{"John", 25}, {"Brandon", 28}, {"Alex", 30}};
    int i;

    int min = s[0].age;             //copying the first value
    (**ip).age = s[0].age;
    strcpy((**ip).name, s[0].name);

    for(i = 1; i < 3; i++)          //starting from the next values to compare
    {
        if(min > s[i].age)
        {
            (**ip).age = s[i].age;
            strcpy((**ip).name, s[i].name);
        }
    }
}

答案 1 :(得分:0)

在您的代码中,

    在将git push origin master传递给函数之前,
  • p
  • 或者,对于&p,在函数

你需要分配内存。另外,你最终会取消引用无效指针,它会调用undefined behavior