본문 바로가기
SMALL

Language60

C014_구조체 정렬하기 C언어에서 구조체를 정렬할 때 멤버 중에서 가장 큰 자료형 크기의 배수로 정렬하게 됩니다. 예를 들어 Person이라는 구조체가 아래와 같이 구성되었다고 가정해 봅시다. struct Person { int age; char flag; }; 위와 같이 구성이 되면 이 구조체의 전체 크기는 8바이트가 됩니다. 가장 큰 int자료형을 기준으로 세는 것이지요. 이렇게 되면 3바이트를 낭비하게 됩니다. 낭비가 생기는 것을 알면서도 컴파일러가 이렇게 처리하는 이유는 CPU가 접근하기 쉬운 위치에 변수들을 배치하기 때문에 4바이트 또는 8바이트 단위로 끊는 바이트 패딩 작업을 수행하는 것입니다. 이때 중간중간 빈 공간이 생깁니다. 다른 컴퓨터(시스템)에서 진행을 하게 되면 끊는 바이트 단위가 바뀔 수도 있습니다. 그.. 2023. 9. 16.
C013_구조체 포인터 사용하기 들어가기에 앞서서 포인터에 대해 설명은 전에 포스팅한 것을 참고해 주시길 바라겠습니다. https://hig0617.tistory.com/15 구조체 포인터 #define _CRT_SECURE_NO_WARNINGS #include #include //strcpy 함수가 선언된 헤더 파일 #include //malloc, free 함수가 선언된 헤더 파일 typedef struct Person { char name[20]; int age; char address[100]; } Person; int main() { Person* p1 = malloc(sizeof(Person)); //구조체 포인터 선언, 메모리 할당 //화살표 연산자로 구조체 멤버에 접근하여 값 할당 strcpy(p1->name, "홍길동".. 2023. 9. 15.
C012_struct, 구조체에 대해 구조체 정의 //선언하기 struct 구조체이름{ 자료형 멤버이름; }; //변수 선언하기 struct 구조체이름 변수이름; 위와 같이 구조체를 선언하는 것이 기본입니다. 익명 구조체 (typedef) 개발자님들께서 변수 'struct 구조체 이름'으로 일일이 변수를 만드는 것이 불편해서 익명 구조체를 만들었습니다. //선언하기 typedef struct _구조체 이름{ 자료형 멤버이름; } 구조체 별칭; //변수 선언하기 구조체별칭 변수이름; typedef를 사용해 익명 구조체를 만듭니다. 이때 '_구조체 이름'과 '구조체 별칭'이름이 같아도 무관합니다. 이렇게 하면 변수를 선언할 때 'struct 구조체 이름'으로 선언하지 않고 '구조체별칭'으로 구조체를 선언할 수 있게 됩니다. Person 구조체 .. 2023. 9. 14.
C011_배열 사용하기 배열 사용하기 #include int main() { int numArr1[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; int* numPtr1 = numArr1; //포인터에 int형 배열을 할당 int binary[20] = { 0, }; printf("%d\n", numArr1[0]); printf("%d\n", numArr1[-1]); //인덱스가 범위를 벗어난다면 쓰레기 값을 출력함 printf("%d\n", sizeof(numArr1)); //4바이트 크기의 요소가 10개이므로 40바이트 printf("%d\n", sizeof(numArr1) / sizeof(int)); //배열의 크기를 구할 때에는 전체 공간의 크기를 요소의 크기로 나누어줌 pri.. 2023. 9. 13.
LIST