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
Prev
1 / 17
구조체 포인터 접근하는 법
☆ Star
↗ Full
구조체 배열 선언과 초기화
#c
#struct
#array
#embedded
#initialization
@devpc
|
2026-05-04 12:39:59
|
GET /api/v1/flows/25/nodes/441?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# 구조체 배열 선언과 초기화 ## 왜 구조체 배열인가 개별 변수로 데이터를 관리하면 금방 한계가 온다. 학생 10명의 이름, 점수, 학번을 각각 배열로 나누면 인덱스 동기화가 틀릴 수 있다. 구조체 배열은 관련 데이터를 묶어서 한 단위로 처리한다. --- ## 기본 선언과 초기화 ```c #include <stdio.h> #include <string.h> typedef struct { int id; char name[32]; float score; } Student; int main(void) { /* 선언과 동시에 초기화 */ Student students[3] = { { 1, "Kim", 88.5f }, { 2, "Lee", 92.0f }, { 3, "Park", 75.3f } }; for (int i = 0; i < 3; i++) { printf("ID: %d | Name: %s | Score: %.1f\n", students[i].id, students[i].name, students[i].score); } return 0; } ``` --- ## 런타임 초기화 컴파일 타임에 값을 모를 때는 루프로 초기화하거나 `memset`으로 0을 채운다. ```c Student pool[10]; /* 방법 1: memset으로 전체 0 */ memset(pool, 0, sizeof(pool)); /* 방법 2: 루프 초기화 */ for (int i = 0; i < 10; i++) { pool[i].id = i + 1; pool[i].score = 0.0f; snprintf(pool[i].name, sizeof(pool[i].name), "User%d", i + 1); } ``` `memset(pool, 0, sizeof(pool))`은 정수 0과 부동소수점 `0.0f`를 모두 올바르게 초기화한다. 포인터 멤버가 있다면 이것만으로 NULL 초기화도 된다. --- ## 임베디드에서의 구조체 배열 MCU에서는 스택 크기가 제한적이므로 큰 배열은 전역 또는 `static`으로 선언한다. ```c /* 전역 선언 — BSS 영역 (초기값 0) */ static Student sensor_log[64]; static uint8_t log_count = 0; void log_sensor(int id, const char *name, float val) { if (log_count >= 64) return; /* 오버플로 방지 */ sensor_log[log_count].id = id; sensor_log[log_count].score = val; strncpy(sensor_log[log_count].name, name, 31); sensor_log[log_count].name[31] = '\0'; log_count++; } ``` --- ## 주의점 - 구조체 배열을 함수에 넘길 때 **배열 자체는 포인터로 전달**된다. 크기는 별도 인자로 함께 넘겨야 한다. - 문자열 멤버를 초기화할 때 `=` 연산자는 안 된다. `strcpy` 또는 `strncpy` 사용. - `sizeof(students)` vs `sizeof(Student)` 혼동 주의: 전자는 배열 전체 크기, 후자는 단일 구조체 크기.
Prev
구조체 포인터 접근하는 법
// COMMENTS
Newest First
ON THIS PAGE
No content selected.