选择结构的数据成员

时间:2017-06-20 16:57:23

标签: c pointers structure

我正在尝试编写一个C程序,根据结构成员的大小,应该将许多成员读入数组。

正如您在下面的代码中看到的,基于bookPtr->size的值,我将把很多成员添加到数组中。

如果bookPtr-> size为3,我将读取所有成员x,y和z。

如果bookPtr-> size为2,我将读取成员x和y。

如果bookPtr-> size为1,我将读取成员x。

如果bookPtr-> size为0,则不会读取任何成员。

但我想进一步优化代码。有一种方法可以减少代码长度。谢谢。

    #include<stdio.h>

    typedef struct
    {
        int x;  
        int y;
        int z;
        int size;
    }Book;



     void Get (Book* bookPtr)
    {
        Book mybook;
        int size = bookPtr->size;
        if(size == 3)
        {
        mybook->x = bookPtr->x;
        mybook->y = bookPtr->y;
        mybook->z = bookPtr->z;
        }

        else if(size == 2)
        {
            mybook->x = bookPtr->x;
            mybook->y = bookPtr->y; 
        }

        else if(size == 1)
        {
            mybook->x = bookPtr->x;
        }
        else
        {

        }

    }

    int main()
    {

        Book bookPtr;
        bookPtr.x =  2 ;
        bookPtr.y =  2 ;
        bookPtr.z =  20 ;   
        bookPtr.size = 2 ;

        Get(&bookPtr);
        return 0;

    }

3 个答案:

答案 0 :(得分:3)

像这样

val

答案 1 :(得分:0)

你可以通过使用数组内部结构来真正优化代码, 但如果您不想更改结构代码,那么下面的代码看起来很酷。

void Get (Book* bookPtr)
{
    Book mybook;
    int size = bookPtr->size;
    if(--size >= 0) {
        mybook->x = bookPtr->x;
    } 
     if(--size >= 0){
        mybook->y = bookPtr->y; 
    }
    if(--size >= 0)
    {
        mybook->z = bookPtr->z;
    }
}

答案 2 :(得分:0)

我建议将所有相关的int字段放在数组中。

#include<stdio.h>

struct Book {
    int data[3];
    int size;
};

void
Print(struct Book *p)
{
    int i, sz = p->size;
    for (i = 0; i < sz; ++i)
    {
        printf("data[%d] = %d\n", i, p->data[i]);
    }
    return;
}

void
Get(struct Book *p)
{
    int i, sz = p->size;
    struct Book mybook;

    mybook.size = sz;

    for (i = 0; i < sz; ++i)
    {
        mybook.data[i] = p->data[i];
    }

    Print(&mybook);

    return;
}


int
main(void)
{
    struct Book book;

    book.data[0] = 2;
    book.data[1] = 2;
    book.data[2] = 20;
    book.size = 2;

    Get(&book);

    return 0;
}

这意味着代码可以容纳任意数量的int字段,以防将来需求发生变化,而不是感染代码的每个部分,假设有三个字段名为xy结构中的zBook