C 指针和结构问题
函数C 指针和结构问题,c,pointers,struct,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
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);
}
typedef结构
{
字符*名称;
智力年龄;
}人;
无效查找年轻人(个人**ip)
{
人s[3]={{“约翰”,25},{“布兰登”,28},{“亚历克斯”,30};
int i;
int min=s[0]。年龄;
对于(i=0;i<3;i++)
{
如果(最小值>s[i].年龄)
**ip=s[i];
}
}
int main()
{
个人*p;
寻找_young&p;
printf(“最年轻的人是%s.\n”,p->name);
}
您需要对代码进行大量更改才能使其正常工作
1) 您需要为结构中的
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) 然后您需要将
name
和age
值正确复制到传递的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);
}
}
}
void find_young(个人**ip)
{
人s[3]={{“约翰”,25},{“布兰登”,28},{“亚历克斯”,30};
int i;
int min=s[0].age;//复制第一个值
(**ip.年龄=s[0].年龄;
strcpy((**ip).name,s[0].name);
对于(i=1;i<3;i++)//从下一个要比较的值开始
{
如果(最小值>s[i].年龄)
{
(**ip).age=s[i].年龄;
strcpy((**ip).name,s[i].name);
}
}
}
在您的代码中
- 对于
,在将p
传递给函数之前&p
- 或者,对于
,在函数内部*ip
你需要分配内存。另一方面,您将取消对无效指针的引用,该指针将调用代码>-->
人p代码>也s[0]
在最小值时未设置。您能更简单地解释一下吗?如果我必须使用双指针,我该怎么办?您的指针尚未设置,应将指针指向对象(PERSON对象)。例如人和人;PERSON*p=&aMan
请注意,在main()
函数的printf之后包含free()
语句是最佳做法。否则,如果在此之后程序没有终止,则会导致内存泄漏。@Magisch,我总是错过这一点。:)