강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

010-5225님의 프로필 이미지
010-5225

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

구조체

10:35 구조체 포인터,구조체 배열 관련

해결된 질문

작성

·

83

0

1.배열포인터는 첫번째 인덱스 값이 나온다고 하셨었는데

구조체 포인터는 초기값이 뭐가 나오나요?

 

struct Person{

int age = 10;

int price = 5;

} person1

 

main(){

struct Person person1;

struct Person *ptr = &person1;

System.out.printf(“%d”, *ptr);

}

 

2.아래처럼 구조체 명을 명시하지 않은경우엔 구조체 배열, 구조체 포인터를 어떻게 생성하나요?

 

struct {

int age = 10;

int price = 5;

} person1

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요, 우선 1번의 질문에 대한 코드 문법이 틀렸습니다. 아래와 같이 고쳐서 말씀드립니다.

 

#include <stdio.h>

struct Person {
    int age;
    int price;
};

int main() {
    // 구조체 변수 초기화
    struct Person person1 = {10, 5};
    
    // 포인터 선언 및 초기화
    struct Person *ptr = &person1;
    
    // 구조체 내용 출력 
    // printf("나이: %d, 가격: %d\n", ptr->age, ptr->price);

    printf("%d", *ptr);

    return 0;
}

구조체 자체를 출력하려면 주석처리된 코드를 사용하시면 되고,

아래의 출력값은 10이 나옵니다.

 

2번 질문은.. 다양한 방식이 있을 수 있습니다.

// 익명 구조체 배열 선언
struct {
    int age;
    int price;
} people[3] = {
    {10, 5},
    {20, 10},
    {30, 15}
};

위와 같이 바로 선언하거나

 

// typedef로 익명 구조체에 타입 이름 부여
typedef struct {
    int age;
    int price;
} Person;

// 이제 Person 타입으로 배열 생성 가능
Person people[3] = {
    {10, 5},
    {20, 10},
    {30, 15}
};

typedef를 이용해서 배열을 선언할 수 있습니다

 

구조체 포인터는 아래와 같은 형식을 말씀하시는 것인가요? 정확히 이해 못해서 코드만 드립니다.

struct {
    int age;
    int price;
} person1 = {10, 5};

// person1에 대한 포인터 생성
void *ptr = &person1;

// 익명 구조체 포인터로 캐스팅하여 사용
struct {
    int age;
    int price;
} *typedPtr = ptr;

printf("나이: %d, 가격: %d\n", typedPtr->age, typedPtr->price);

위는 포인터를 사용하는 방법입니다.

 

 

typedef struct {
    int age;
    int price;
} Person;

Person person1 = {10, 5};
Person *ptr = &person1;

printf("나이: %d, 가격: %d\n", ptr->age, ptr->price);

typedef를 이용해서 구조체를 Person으로 정해서 사용하는 방법입니다.

 

제 답변이 질문의 취지와 다르면 대댓글로 다시 질문 부탁드립니다.

근데, 이렇게까지 실기시험이 나올까 싶긴 합니다..

 

0

안녕하세요, 인프런 AI 인턴입니다. 010-5225님.

구조체 포인터와 배열에 관련된 질문에 대해 설명드리겠습니다.

1. 구조체 포인터의 초기값

배열 포인터가 배열의 첫 번째 요소를 가리키고 첫 번째 인덱스의 값이 나오는 것처럼, 구조체 포인터도 구조체의 첫 번째 멤버를 가리키는 것이 기본입니다. 그러나, C에서는 구조체 포인터를 직접적으로 출력할 때, 포인터 연산을 통해 특정 멤버에 접근하지 않으면 아무 의미가 없는 값을 출력하게 됩니다.

예를 들어, printf("%d", *ptr); 는 직접적으로 구조체의 멤버 정보를 출력하지 않으며, 컴파일 오류를 유발합니다.

대신, 구조체 멤버에 접근하려면 -> 연산자를 사용해야 합니다:

struct Person {
    int age;
    int price;
};

int main() {
    struct Person person1;
    struct Person* ptr = &person1;

    // 멤버에 접근하기 위해서는 -> 연산자를 사용
    ptr->age = 10; // 또는 (*ptr).age = 10;
    printf("%d", ptr->age);

    return 0;
}

2. 구조체 명시 없이 구조체 배열, 포인터 생성

익명 구조체(구조체의 이름을 지정하지 않은 경우)의 경우, 해당 선언 구문에서 변수를 바로 생성할 수 있지만 나중에 추가적인 변수를 해당 타입으로 만들 수 없습니다. 배열이나 포인터를 사용하려면 typedef 등을 활용해 구조체 타입을 정의할 필요가 있습니다.

struct {
    int age;
    int price;
} person1;

// 구조체 포인터의 선언
typeof(person1) *ptr = &person1;

// 배열
typeof(person1) array[10];

익명 구조체를 사용할 때는 직접적인 재사용이 어렵기 때문에 typedef를 통해 이름을 부여하거나, 명시적으로 구조체명을 지정하는 것이 좋습니다.

관련된 추가적인 질문은 다음 게시물을 참고하시면 도움이 될 수 있습니다:
- C언어 구조체 관련 질문: 구조체 명칭과 사용 방법에 대한 설명이 담겨 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

010-5225님의 프로필 이미지
010-5225

작성한 질문수

질문하기