C언어 구조체 struct, 구조체 포인터

2025. 1. 17. 17:13·잡다한 공부
반응형

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년도 정처기 준비하시는 분들 다같이 파이팅 해요 ! 

출처 : 주말코딩 정보처리기사

728x90
반응형

'잡다한 공부' 카테고리의 다른 글

ASCII CODE  (3) 2025.01.18
커스텀 자료형 typedef  (7) 2025.01.18
재귀함수란 무엇일까?  (6) 2025.01.16
C언어 메모리 접근 방법, 포인터  (3) 2025.01.06
프로그래밍 관점 함수란?  (3) 2024.12.31
'잡다한 공부' 카테고리의 다른 글
  • ASCII CODE
  • 커스텀 자료형 typedef
  • 재귀함수란 무엇일까?
  • C언어 메모리 접근 방법, 포인터
dzaaling
dzaaling
  • dzaaling
    huigrowthdiary
    dzaaling
  • 전체
    오늘
    어제
    • 분류 전체보기 (31)
      • language (6)
        • Java (6)
      • data base (1)
        • Oracle (1)
      • frontend (3)
        • HTML5 (0)
        • CSS3 (0)
        • Javascript (3)
      • backend (3)
        • Spring (3)
      • 코딩테스트 (2)
      • 잡다한 공부 (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    중위식
    쿼리파라미터
    코딩테스트
    정처기 파이썬
    스프링부트
    자바스크립트
    orcale 11g
    정처기 매크로
    부분 함수 종속
    프로그래밍
    2정규화
    c언어
    자바
    커스텀자료형
    C
    vscode 플러그인
    정보처리기사
    코린이
    정처기 전위식
    백준
    정처기 데이터베이스
    정처기
    정처기 실기
    정처기 비트연산
    후위식
    javascript
    java
    정처기 증감
    전위식
    인텔리제이오류
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dzaaling
C언어 구조체 struct, 구조체 포인터
상단으로

티스토리툴바