10:35 구조체 포인터,구조체 배열 관련
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언어 구조체 관련 질문: 구조체 명칭과 사용 방법에 대한 설명이 담겨 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
정처기 2026-3 실기 문의
0
86
2
정처기 실기 3회 컴싸 사용 여부
0
55
1
모의고사 1 회 2번문제 중
0
73
2
26-2 이론문제 재탕
1
54
1
26-2년도 코드문제
0
38
0
26-2 코드문제
0
43
1
15분 48초 질문
0
61
2
26-1년도 이론문제 재탕
0
68
1
26-1년도 코드문제 재탕
0
48
0
이론재탕만 눈치챘어도
0
76
1
25-3년도 이론문제 재탕
0
59
1
25-3년도 코드문제 재탕
0
43
0
출력값 문의
0
56
2
25-2 분기커버리지
0
48
0
25-2 이론 재탕
0
70
1
25-1 이론 재탕
0
54
1
서브넷 마스크
0
54
2
모의고사 1회 계산문제 2개 맞았는데
0
70
2
업캐스팅 문제 예시 4번 부모 호출
0
51
2
모의고사 자료 해설이 너무 불친절하네요.
0
96
2
부모의 생성자 출력 관련
0
50
2
24-3 이론파트 재탕문제
0
58
0
누락코드
0
47
1
다차원 배열 포인터 질문있습니다
0
72
3





