programing

구조물의 새 인스턴스(instance)를 만드는 방법

padding 2023. 10. 15. 17:04
반응형

구조물의 새 인스턴스(instance)를 만드는 방법

구조물의 새 인스턴스를 만드는 올바른 방법은 무엇입니까?주어진 구조:

struct listitem {
    int val;
    char * def;
    struct listitem * next;
};

나는 두가지 방법을..

첫 번째 방법(xCode는 이것이 구조와 그르다고 말합니다):

struct listitem* newItem = malloc(sizeof(struct listitem));

두번째 방법:

listitem* newItem = malloc(sizeof(listitem));

아니면 다른 방법이 있습니까?

포인터를 원하는지 아닌지에 따라 다릅니다.

구조를 이렇게 부르는 것이 좋습니다.

typedef struct s_data 
{
    int a;
    char *b;
    // etc..
} t_data;

노포인터 구조에 대한 인스턴스화 후:

t_data my_struct;
my_struct.a = 8;

그리고 포인터를 원한다면 그렇게 할당해야 합니다.

t_data *my_struct;
my_struct = malloc(sizeof(t_data));
my_struct->a = 8

이것이 당신의 질문에 대한 답이 되길 바랍니다.

두 번째 방법은 사용한 경우에만 작동합니다.

typedef struct listitem listitem;

유형을 가진 변수를 선언하기 전에listitem. 구조를 동적으로 할당하는 대신 정적으로 할당할 수도 있습니다.

struct listitem newItem;

당신이 보여준 방식은 모든 사람들에게 다음과 같습니다.int생성할 항목:

int *myInt = malloc(sizeof(int));

다른 답변 외에 인스턴스를 생성하는 두 가지 간단한 방법을 추가하고자 합니다.예:

struct Person{
    float position[2];
    int age;
    char name[20];
}
struct Person p1 = { {4, 1.1}, 20, "John" };
struct Person p2 = { .age=60, .name="Jane", .position={0, 0} };
printf("%s, aged %i, is located at (%f, %f)\n", p1.name, p1.age,p1.position[0], p1.position[1] );
printf("%s, aged %i, is located at (%f, %f)\n", p2.name, p2.age,p2.position[0], p2.position[1] );

출력:

John, aged 20, is located at (4.000000, 1.100000)
Jane, aged 60, is located at (0.000000, 0.000000)

참고:p1속성의 순서가 구조 정의의 순서와 일치합니다.유형을 사용할 때 struct를 항상 입력하지 않으려면 다음을 사용하여 새 별칭을 정의할 수 있습니다.

typedef struct Person SomeNewAlias;
SomeNewAlias p1;

그리고 새 가명을 예전 이름과 똑같이 부르면 됩니다.

typedef struct Person Person;
Person p1;
struct listitem newItem; // Automatic allocation
newItem.val = 5;

다음은 http://www.cs.usfca.edu/ ~wolber/SoftwareDev/C/Cstructs.htm 구조에 대한 간단한 설명입니다.

언급URL : https://stackoverflow.com/questions/32577808/how-to-create-a-new-instance-of-a-struct

반응형