이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

[4주차] 구조체

  • 2020.04.10 15:29
  • 학부 수업/C프로그래밍
반응형

구조체 Structure

여러가지 변수들을 묶어 객체처럼 관리하는 것.

struct Student{
    int id;
    char name[10];
};

위처럼 정의한 후 선언할 때는 구조체명만 쓰는게 아니라 struct도 써줘야 한다. 초기화는 중괄호로 하면 된다.

struct Student gio = {19011484, "GIO"};

맴버 변수 사용은 .을 붙여서 하면 된다.

gio.id = 19011484;

활용

1.정의와 선언을 한큐에

구조체 정의와 선언을 한번에 할 수 있다.

struct Student{
    int id;
    char name[10];
} st = {19011484, "GIO"};

C언어를 고인물 파티로 만드는 원인이 여깄었다.

2.역겹도르

이름이 없는 구조체를 만들 수 있다.

struct {
    int this_is;
    char madness;
} str;

이렇게 하면 일회용 구조체를 만들 수 있다. 이름이 없으므로 다른곳에서 선언이 불가하기 때문이다.

구조체의 크기

구조체는 보통 맴버변수의 크기의 합을 크기로 가지지만, 구조체는 8바이트 단위로 할당되기 때문에 꼭 크기의 합이 아닐수도 있다.

구조체의 크기가 궁굼하면 sizeof()함수를 활용하자.

구조체 배열

구조체로 배열을 만들 수도 있다. 별 특별한 것은 없고 초기화를 중괄호로 할 수 있다.

struct student st[3] = {{"Tom", 1, 90}, {"Holand", 2, 100}}

생략된 부분은 0과 null로 초기화된다.

구조체 포인터

일반적 사용법은 포인터와 같다. 포인터는 구조체가 시작하는 곳에서 시작한다.

struct student{};

struct student std[10];

printf("%d", (*std).id))

구조체 포인터를 통한 맴버 변수 접근

구조체 포인터를 통해서 구조체의 맴버에 접근하기 위한 방법은 아래와 같다.

(*p).id = 10;

괄호를 씌워주는 이유는 간접연산자(*)보다 점(.) 연산자의 우선순위가 높기 때문이다.

혹은 구조체 포인터에만 사용가능한 화살표 연산자를 사용한다. 이 방법이 더욱 보편적이다.

p->id = 10;

구조체 함수

구조체를 함수의 인자값이나 리턴값으로 사용할 수 있음.

struct student modify(struct student st)
{
    st.name = "Gio Paik";
    return st;
}

일반 변수를 사용하는 것과 크게 다르지 않다.

중첩 구조체

다른 구조체를 맴버 변수로 사용하는 구조체

struct address { // 구조체 address 정의
    int zipcode;
    char *city;
};

struct student { // 구조체 student 정의
    int id;
    char name[8];
    double grade;
    struct address addr; // 멤버 addr의 자료형은 struct address
};

맴버값 참조는 아래와 같이 하면 된다.

st.addr.zipcode = 13603;

너무 남용하면 스파게티 코드가 된다.

자기참조 구조체

자기 자신을 맴버 변수로 갖는 구조체는 만들 수 없다. 그러나 자신의 포인터를 변수로 갖는 구조체는 가능하다.

struct human{
    int age;
    char name[20];
    struct human *friends[10];
};

사용자 형정의 typedef

구조체나 자료형의 이름을 사용자가 지정해 줄 수 있다.

typedef int INT;
typedef struct student{
    int id;
    char name[20];
} STUDENT;

편안...

반응형

'학부 수업 > C프로그래밍' 카테고리의 다른 글

[6주차] 연산자 함수, 자료형 심화  (0) 2020.04.10
[5주차] 동적 할당  (0) 2020.04.10
[3주차] 문자열  (0) 2020.04.10
[2주차] 포인터 개요 및 복습  (0) 2020.04.10
세종대학교 고급 C 프로그래밍 강의노트  (2) 2020.04.10

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [6주차] 연산자 함수, 자료형 심화

    [6주차] 연산자 함수, 자료형 심화

    2020.04.10
  • [5주차] 동적 할당

    [5주차] 동적 할당

    2020.04.10
  • [3주차] 문자열

    [3주차] 문자열

    2020.04.10
  • [2주차] 포인터 개요 및 복습

    [2주차] 포인터 개요 및 복습

    2020.04.10
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바