null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
⌂
C언어 실전 코드 패턴
Structure
struct
•
구조체 배열 선언과 초기화
•
구조체 포인터 접근하는 법
•
Swap 함수를 구조체에 적용하기
•
연결리스트 삽입·삭제·정렬
memory-pointer
•
malloc·free 사용 패턴
•
포인터로 Swap 구현하기
•
배열 복사 — memcpy vs 루프 비교
string-impl
•
strlen을 직접 짜면
•
strcpy를 직접 짜면
•
strcat·strcmp 구현과 안전한 대안
const-module
•
const 올바른 사용법
•
.h 파일과 .c 파일 역할 구분
•
파일 입출력 패턴
practical-tricks
•
가변길이 배열 파라미터 처리
•
!! 이중 부정 연산자
•
Windows 소켓 에러 모음
•
미니 프로젝트 — 영타 연습기 만들기
Flow Structure
구조체 배열 선언과 초기화
2 / 17
Swap 함수를 구조체에 적용하기
☆ Star
↗ Full
구조체 포인터 접근하는 법
#c
#struct
#pointer
#arrow-operator
#embedded
@devpc
|
2026-05-04 12:39:59
|
GET /api/v1/flows/25/nodes/442?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# 구조체 포인터 접근하는 법 ## . 연산자와 -> 연산자 구조체를 직접 변수로 가지면 `.` 연산자로 멤버에 접근하고, 포인터로 가지면 `->` 연산자를 쓴다. ```c typedef struct { int id; char name[32]; } Node; Node n = { 1, "test" }; /* 직접 변수 */ Node *p = &n; /* 포인터 */ /* 두 표현은 동일하다 */ printf("%d\n", n.id); /* . 연산자 */ printf("%d\n", p->id); /* -> 연산자 */ printf("%d\n", (*p).id); /* -> 의 풀어쓴 형태 */ ``` `p->id`는 `(*p).id`의 축약이다. 실무에서는 항상 `->` 를 쓴다. --- ## 함수에 구조체를 넘기는 두 가지 방법 ### 값으로 전달 (복사) ```c void print_node(Node n) { printf("ID: %d, Name: %s\n", n.id, n.name); } /* 호출 */ print_node(n); /* n 전체가 스택에 복사됨 */ ``` 구조체 크기가 크면 스택 사용량과 복사 비용이 늘어난다. 임베디드에서는 주의. ### 포인터로 전달 (참조) ```c void print_node_ptr(const Node *n) { printf("ID: %d, Name: %s\n", n->id, n->name); } void update_score(Node *n, int new_id) { n->id = new_id; /* 원본 수정 */ } ``` 읽기 전용이면 `const Node *`, 수정 필요하면 `Node *`. 임베디드에서는 대부분 포인터로 전달한다. --- ## 구조체 포인터 배열 연결리스트, 테이블 등에서 구조체 포인터 배열이 자주 쓰인다. ```c #define MAX_NODES 8 Node nodes[MAX_NODES]; /* 실제 데이터 */ Node *ptrs[MAX_NODES]; /* 포인터 배열 */ /* 포인터 배열 초기화 */ for (int i = 0; i < MAX_NODES; i++) { ptrs[i] = &nodes[i]; } /* 접근 */ ptrs[0]->id = 42; ``` --- ## 임베디드 관용구: 레지스터 구조체 포인터 MCU 주변장치 레지스터를 구조체로 매핑할 때 포인터가 핵심이다. ```c typedef struct { volatile uint32_t CR; /* Control Register */ volatile uint32_t SR; /* Status Register */ volatile uint32_t DR; /* Data Register */ } USART_TypeDef; #define USART1 ((USART_TypeDef *)0x40011000UL) /* 레지스터 접근 */ USART1->CR |= (1u << 0); /* USART 활성화 */ uint32_t status = USART1->SR; ``` 이 패턴은 STM32/CMSIS 헤더 전체에서 쓰인다. `->` 이해 없이는 드라이버 코드를 읽을 수 없다.
구조체 배열 선언과 초기화
Swap 함수를 구조체에 적용하기
// COMMENTS
Newest First
ON THIS PAGE
No content selected.