控制结构数组上的双指针
control double pointer on array of structs
我需要为指针打印一个名称。
但它根本不起作用。控制台停止..
也许问题出在 'find_young' 函数上。
我不知道是什么问题以及如何解决它。
我能为正确的代码做些什么。
下面是我的代码。
========
typedef struct {
char *name;
int age;
} PERSON;
PERSON s[3] = { {"ACE", 25}, {"HEART" ,28}, {"CLOVER", 40} };
void find_young(PERSON **p) {
int i;
for (i = 0; i < 1; i++) {
if (s[i].age > s[i+1].age) {
p = &s[i+1];
}
}
};
void Ex1()
{
struct PERSON *p;
p = &s[0];
find_young(&p);
printf("youngest man is %s.", p->name);
}
您在错误的类型之间进行分配,编译器应该警告您:
p = &s[i + 1];
这里的表达式&s[i + 1]
是一个指向PERSON
的指针,但是p
是一个指向指向[=13=的指针].不太一样。
你想要的是
*p = &s[i + 1];
struct PERSON 错误,您已经使用了 typedef,因此无需使用 struct。只需使用 PERSON *p。
要找到最小的,您的代码应如下所示:
#include<stdio.h>
typedef struct {
char *name;
int age;
} PERSON;
PERSON s[3] = { {"ACE", 100}, {"HEART" ,28}, {"CLOVER", 40} };
void find_young(PERSON **p) {
int i;
for (i = 0; i < ((sizeof(s)/sizeof(s[0]) -1); i++) {
if (*(p)->age > s[i+1].age) {
*p = &s[i+1];
}
}
};
void Ex1()
{
PERSON *p;
p = s;
find_young(&p);
printf("youngest man is %s.", p->name);
}
int main()
{
Ex1();
return 0;
}
我需要为指针打印一个名称。 但它根本不起作用。控制台停止..
也许问题出在 'find_young' 函数上。 我不知道是什么问题以及如何解决它。 我能为正确的代码做些什么。
下面是我的代码。
========
typedef struct {
char *name;
int age;
} PERSON;
PERSON s[3] = { {"ACE", 25}, {"HEART" ,28}, {"CLOVER", 40} };
void find_young(PERSON **p) {
int i;
for (i = 0; i < 1; i++) {
if (s[i].age > s[i+1].age) {
p = &s[i+1];
}
}
};
void Ex1()
{
struct PERSON *p;
p = &s[0];
find_young(&p);
printf("youngest man is %s.", p->name);
}
您在错误的类型之间进行分配,编译器应该警告您:
p = &s[i + 1];
这里的表达式&s[i + 1]
是一个指向PERSON
的指针,但是p
是一个指向指向[=13=的指针].不太一样。
你想要的是
*p = &s[i + 1];
struct PERSON 错误,您已经使用了 typedef,因此无需使用 struct。只需使用 PERSON *p。 要找到最小的,您的代码应如下所示:
#include<stdio.h>
typedef struct {
char *name;
int age;
} PERSON;
PERSON s[3] = { {"ACE", 100}, {"HEART" ,28}, {"CLOVER", 40} };
void find_young(PERSON **p) {
int i;
for (i = 0; i < ((sizeof(s)/sizeof(s[0]) -1); i++) {
if (*(p)->age > s[i+1].age) {
*p = &s[i+1];
}
}
};
void Ex1()
{
PERSON *p;
p = s;
find_young(&p);
printf("youngest man is %s.", p->name);
}
int main()
{
Ex1();
return 0;
}