일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- gensim 3.7.3 설치 오류
- 말 인용
- 출력
- 겁나 많아
- 국립과천과학관
- 딥러닝
- 미래 사회의 단위
- 반복 구조 찾기
- 순서도
- 운영체제의 기능 1. 자원 관리 기능 2. 시스템 보호 3. 네트워크(통신 기능)
- 소프트웨어 시대
- 절차적 사고
- 운영체제 목적
- 소프트웨어
- 공부정리
- 앨런 튜링
- 운영체제 서비스
- 선택
- 레지스터
- 절차적 사고의 장점
- 패킷트레이서 이용
- 기계어
- 뿌..
- 운영체제의 발달 과정
- 프로그래밍
- 해결 방안
- 컴퓨터
- 운영체제의 미래
- 처리
- 장치에 할당할 수 없는 NET ID Broadcast주소
- Today
- Total
hye-_
35강 | 구조체 본문
35강 | 구조체
자료 출처 - 깨알 C언어 | 35. 구조체 (youtube.com)
구조체란?
- 구조를 만드는 언어
- 여러 변수들을 모아서, 하나의 객체를 구성할 때 사용하는 사용자 정의 타입 객체
사람이라는 것을 표현한다면
이름, 나이, 키 등등의 변수들을 각각 선언하면 사용하기 힘들다.
그래서 이 변수들을 묶어서 사람이라는 객체를 만들어버린다. 이렇게 표현된 것들을 보고 구조체라고 한다.
객체지향언어, 자바, c++에서는 이런 멤범변수와 메서드를 묶어서 하나의 객체를 만드는데,
c언어는 그렇게 못한다. 그래서 메서드를 빼버리고, 사람이 가지고 있는 어떤 구조 이름, 나이, 키 이런 것들을 묶어서 내가 정의한 변수가 되는 것이다. 사람이라는 사용자 정의 변수가 되는 게 구조체이다.
구조체란 별로 어려운게 아니다.
하나의 구조를 만들어놓고 뭐뭐점 뭐뭐점 이런 식으로 사용할 수 있는 게 구조체이다.
구조체 구성
struct
어떤 사용자 정의 타입의 구조를 만들겠다. 라는 의미
구조체를 구성하는 변수가 들어간다.
int가 들어간다던지, char가 들어간다던지, 쭉쭉 써놓는다.
그러면 이 구조체 하나에는 여러개의 변수가 담기는 형태가 된다.
구조체 정의 및 사용
기본 구조체 사용
struct person
person이라는 사용자 정의 구조체를 만들겠다.
person안에는 name이라는 포인터 변수 char형이 있고, int형인 age 변수가 있다.
이렇게 정의를 한다.
struct person user1;
사용할 때는 어떻게 사용하느냐?
구조체 변수를 하나 만들것인데, person이라는 구조체 이름은 user1로 할 것이다. 그러면 user1이라는 어떤 변수가 생겼다고 보면 된다. 하나의 변수가 생겼는데, 이 안에는 name과 age가 들어가 있는 상태인 것이다.
user1.name = "h user";
유저 1점 네임을 하게 되면 유저 1이 가리키게 되는 name이라는 공간 안에다가 h user를 집어넣게 된다.
%s, user1.name
문자열을 출력하는 것이다. user1.name 이 가지고 있는 name을 출력할 수 있게 된다. 이게 바로 기본적인 구조체의 사용이다.
생성을 같이해버리는 방법
person이라는 구조체를 만들 것인데, 나는 선언하고 그러는 거 귀찮아서 하기 싫다.
그러면 test; 집어넣는다. 그러면 test라는 인스턴스가 하나 생성이 되는 것이다.
test.name = , test.age=
출력할 때에도, test.name, test.age
포인터에 담는 방법
person이라는 구조체를 만들고, p를 포인터 변수로 만들었다.
포인터 변수로 만들었을 때에는 -> 이렇게 사용한다.
구조체를 만들 것인데, 이름은 list이다. 이 구조체 안에는 포인터 변수 fp가 있다.
fp에는 정수형 공간을 가리키고 있는 주소값을 담고 있다.
data, *p
이것을 인스턴스 생성시키겠다.
p=&data
data 주소값이 100번지라고 할 때, p는 data의 주소값을 담는다. 그러니깐 *p의 구조체 자체가 없어진다. 그냥 p가 data를 가리키고만 있는다.
p->fp=x+1;
p는 자신의 fp를 가리키고 있지 않다. data를 가리키고 있기 때문에 data의 fp라고 생각해야 된다.
지금 x의 주소값을 200번지라고 가정하에 x는 200을 가리키고 있고 +1을 하면 201번지가 된다. 201번지를 data의 fp에 넣어진다.
*(++p->fp)
++가 앞에 있다고 해서 ++를 먼저 해주는 게 아니다. 구조체에서는 p->fp가 하나의 변수를 가리키는 것이기 때문이다.
p의 fp는 201이다. 201 ++를 해서 202가 된다. 202번지의 값을 출력해 주면 된다.
'언어 > C언어_기초' 카테고리의 다른 글
37강 | 함수 (0) | 2024.02.26 |
---|---|
36강 | 배열 포인터 (1) | 2024.02.26 |
31강 ~ 34강| 포인터 배열 (0) | 2024.02.19 |
29강 2차원 배열과 포인터 (0) | 2023.10.18 |
28강 배열과 포인터(4) (0) | 2023.10.18 |