控制结构数组上的双指针

时间:2015-11-30 10:02:31

标签: c arrays struct function-calls double-pointer

我需要为指针打印一个名字。 但它根本不起作用。控制台停止..

问题可能在'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);
}

2 个答案:

答案 0 :(得分:6)

您在错误的类型之间进行分配,编译器应该警告您:

p = &s[i + 1];

此处表达式&s[i + 1]是指向PERSON的指针,但p是指向指针指向PERSON的指针。不太一样。

你想要的是

*p = &s[i + 1];

答案 1 :(得分: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;
}