简体   繁体   中英

How do we use structs?

The main problem I'm having is having so many parameters, which I just want to get rid of, and yes I do not understand the logic of structs. However, it is becoming a bit more clear...

EDIT So cHao wanted me to use a specific case so here is an example I cooked up:

#include <stdio.h>

int main()
{
    //Top coord. of the square
    int top_x1 = 0;
    int top_y1 = 10;
    int top_x2 = 10;
    int top_y2 = 10;

    //Bottom coord. of the square
    int bottom_x1 = 0;
    int bottom_y1 = 0;
    int bottom_x2 = 10;
    int bottom_y2 = 0;

    //Left coord. of the square
    int left_x1 = 0;
    int left_y1 = 0;
    int left_x2 = 0;
    int left_y2 = 10;

    //Right coord. of the square
    int right_x1 = 10;
    int right_y1 = 0;
    int right_x2 = 10;
    int right_y2 = 10;

    parameter(top_x1, top_y1, top_x2, top_y2, bottom_x1,
              bottom_y1, bottom_x2, bottom_y2, left_x1,
              left_y1, left_x2, left_y2, right_x1, right_y1,
              right_x2, right_y2);
}

parameter (int top_x1,int top_y1,int top_x2,int top_y2,int bottom_x1,
              int bottom_y1,int bottom_x2,int bottom_y2,int left_x1,
              int left_y1,int left_x2,int left_y2,int right_x1,int right_y1,
              int right_x2,int right_y2)
{
    int totalParameter, topSide, bottomSide, leftSide, rightSide;

    topSide = (top_x2 - top_x1);
    bottomSide = (bottom_x2 - bottom_x1);
    leftSide = (left_y2 - left_y1);
    rightSide = (right_y2 - right_y1);

    totalParameter = (topSide + bottomSide + leftSide + rightSide);
    printf("%d\n", totalParameter);

}

and if I try using structs...

#include <stdio.h>>

struct coordinates
{
    int x1, y1, x2, y2;
};

int main()
{
    struct coordinates top;
    struct coordinates bottom;
    struct coordinates left;
    struct coordinated right;

    //Top line of the square
    top.x1 = 0;
    top.y1 = 10;
    top.x2 = 10;
    top.y2 = 10;

    //Bottom line of the square
    bottom.x1 = 0;
    bottom.y1 = 0;
    bottom.x2 = 10;
    bottom.y2 = 0;

    //Left line of the square
    left.x1 = 0;
    left.y1 = 0;
    left.x2 = 0;
    left.y2 = 10;

    //Right line of the square
    right.x1 = 10;
    right.y1 = 0;
    right.x2 = 10;
    right.y2 = 10;
}

parameter(top, bottom, left, right)
{
    int totalParameter, topSide, bottomSide, leftSide, rightSide;

    topSide = (top.x2 - top.x1);
    bottomSide = (bottom.x2 - bottom.x1);
    leftSide = (left.y2 - left.y1);
    rightSide = (right.y2 - right.y1);

    totalParameter = topSide + bottomSide + leftSide + rightSide;
    printf("%d\n", totalParameter);

}

Doesn't work though, any help? :P Error I get is: "Request for member 'x1' in something not a structure of union. For all the x and y coords.

typedef struct _foo
{
    int x1, x2, x3,..., x20;
} foo;

int add(const foo *pBar)
{
    return pBar->x1 + pBar->x2 + pBar->x3 + ... + pBar->x20;
}

int main()
{
    // declare and initialize the struct
    foo bar = { 1, 2, 3, ..., 20 };

    // an alternative way of initializing the struct:
    bar.x1 = 1;
    bar.x2 = 2;
    bar.x3 = 3;
     :
    bar.x20 = 20;

    int total = add(&bar);
}

Refers to general using of struct, not the technical side: (because it seems to me that you do not understand the logic in it)

You should use struct for group of variables they part of one thing.

For example, struct point (to represent point in in space) will contain int for X and int for Y.

You should use array for group of variables they the relation between their is serial.

For example: students in class, since you want to do same actions on each student in sequence.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM