해결된 질문
작성
·
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님.
구조체 포인터와 배열에 관련된 질문에 대해 설명드리겠습니다.
배열 포인터가 배열의 첫 번째 요소를 가리키고 첫 번째 인덱스의 값이 나오는 것처럼, 구조체 포인터도 구조체의 첫 번째 멤버를 가리키는 것이 기본입니다. 그러나, 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;
}
익명 구조체(구조체의 이름을 지정하지 않은 경우)의 경우, 해당 선언 구문에서 변수를 바로 생성할 수 있지만 나중에 추가적인 변수를 해당 타입으로 만들 수 없습니다. 배열이나 포인터를 사용하려면 typedef 등을 활용해 구조체 타입을 정의할 필요가 있습니다.
struct {
int age;
int price;
} person1;
// 구조체 포인터의 선언
typeof(person1) *ptr = &person1;
// 배열
typeof(person1) array[10];
익명 구조체를 사용할 때는 직접적인 재사용이 어렵기 때문에 typedef를 통해 이름을 부여하거나, 명시적으로 구조체명을 지정하는 것이 좋습니다.
관련된 추가적인 질문은 다음 게시물을 참고하시면 도움이 될 수 있습니다:
- C언어 구조체 관련 질문: 구조체 명칭과 사용 방법에 대한 설명이 담겨 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.