C언어 구조체(struct)
여러 데이터를 하나의 단위로 묶어서 관리할 수 있게 해주는 사용자 정의 데이터 타입입니다.
구조체 사용시 다양한 타입의 데이터를 하나로 묶어서 처리할 수 있다는 장점이 있습니다.
예시 코드
#include <stdio.h>
struct Person {
char name[50];
int age;
float height;
};
값에 접근하기 위해서는 구조체변수.구조체멤버로 접근한다.
구조체에서 문자 배열에 값을 대입 하는 방법
(1) 반복문을 통한 방법
#include <stdio.h>
struct Person {
char name[50];
int age;
float height;
}person1;
int main() {
person1.age = 25;
char name[] = "WeekendCode";
for (int i = 0; i < sizeof(name);i++) {
person1.name[i] = name[i];
}
}
(2) strcpy 를 이용하여 넣기
#include <stdio.h>
#include <string.h>
struct Person {
char name[50];
int age;
float height;
}person1;
int main() {
person1.age = 25;
strcpy(person1.name, "WeekendCode");
}
strcpy 함수란 ?
str(= string), cpy(=copy) 문자열을 복사하는 함수입니다.
* strcpy 함수는 문자 배열의 마지막 값인 널(Null)값 까지 복사를 해서 가지고 옵니다.
구조체 포인터
#include <stdio.h>
#include <string.h>
struct Bag {
char brand[50];
int year;
float price;
};
void printBag(struct Bag *bag) {
printf("Brand: %s\n", bag->brand);
printf("Year: %d\n", bag->year);
printf("Price: %.2f\n", bag->price);
}
int main() {
struct Bag myBag;
struct Bag* bagPtr = &myBag;
//구조체 포인터 선언 및 초기화
//포인터를 통해 값 할당
strcpy(bagPtr->brand, "Gucci");
bagPtr->year = 2021;
bagPtr->price = 1500.50;
printBag(bagPtr);
//구조체 포인터를 사용하여 함수 호출
return 0;
}
구조체 포인터가 같이 사용하게 되면 조금 어려워 진다.
중요한 것은
변수는 어떤 값을 저장한다는 것부터, 포인터는 주소 값을 저장한다는 개념을 알고 있으면 좋다.
주소 연산자 = &
주소 연산자는 변수의 이름 앞에 사용하며, 해당 변수의 주소를 반환합니다.
참조 연산자 = *
참조 연산자는 포인터의 이름이나 주소 앞에 사용하며, 포인터가 가리키는 주소에 저장된 값을 반환합니다.
포인터 선언
//기본문법
//타입 *포인터명;
int *number;
int* number;
int * number;
위에서 보는 것처럼 *의 위치는 상관 없습니다.
//선언과 동시 초기화
//타입 *포인터명 = &변수명;
int nubmer = 1;
int *p = &number;
number 변수를 1로 초기화해주었고 포인터 p에는 주소 값이 저장되어야 합니다.
number 의 주소로 *p를 선언해주었습니다.
구조체 포인터
포인터가 어떤 변수의 주소를 담아 가리키는 변수이기 때문에 구조체 포인터도 마찬가지입니다.
구조체의 주소를 가리키는 포인터를 구조체 포인터라고 합니다.
//구조체 포인터
//struct 구조체 이름 *구조체 포인터 이름;
struct Person person1;
struct Person *person2 = &person1;
//또 다른 방법
struct Perosn perosn1;
struct Person *person2;
person2 = &person1;
구조체 포인터 접근 방법
//구조체 포인터 접근 방법
//1. (*구조체포인터).멤버변수이름
(*person2).name
//2. 구조체포인터 -> 멤버변수이름
person2 -> name
주말코딩님께서 하시는 말씀이 ..
" 구조체는 여러 타입을 하나로 묶는 ""뭉텅이"" 를 정의 한다 "
" 구조체 다음 변수명을 작성하면 조금 더 편해진다 "
" 구조체가 선언된 이후에 접근할 때 .과 ->를 사용한다 "
를 외워야 한다고 합니다.
25년도 정처기 준비하시는 분들 다같이 파이팅 해요 !
출처 : 주말코딩 정보처리기사
'잡다한 공부' 카테고리의 다른 글
ASCII CODE (3) | 2025.01.18 |
---|---|
커스텀 자료형 typedef (7) | 2025.01.18 |
재귀함수란 무엇일까? (6) | 2025.01.16 |
C언어 메모리 접근 방법, 포인터 (3) | 2025.01.06 |
프로그래밍 관점 함수란? (3) | 2024.12.31 |