728x90
728x90

구조체 7

C] 공용체(Union) 간단 정리

공용체(Union)는 기본적으로 구조체와 같은 선언 문법과 사용법이 동일한데, 가장 큰 차이점은 구조체 내의 멤버 변수들은 각자에게 할당된 메모리가 있으며 서로의 공유하지 않는데, 공용체는 멤버 변수 중 가장 큰 자료형의 공간을 공유하는 특성을 가지고 있음. 공용체를 선언할 때는 union 키워드를 사용. union {int i;short s[2];} u; 위 공용체의 크기를 sizeof()를 이용해 확인하면 4가 반환된다. 가장 큰 자료형이 int형이고 int형은 4바이트를 차지하기 때문이다. 만약 공용체 u가 구조체였다면 sizeof()를 통해 구조체 크기를 확인하면 4+2*2=8로 나왔을 것이다. 공용체는 기본적으로 공용체의 선두 번지와 같은 공간에 배치되어서 i의 번지와 s의 번지가 동일하게 된다..

비트맵(bmp) 구조체 구조

typedef struct BITMAPFILEHEADER // 비트맵 파일 헤더 구조체{unsigned short bfType; // BMP 파일 매직넘버unsigned int bfSize; // 파일 사이즈unsigned short bfReserved1; // 예약, 0unsigned short bfReserved2; // 예약unsigned int bfOffBits; // 비트맵 데이터 시작 위치} BITMAPFILEHEADER; typedef struct BITMAPINFOHEADER // 비트맵 정보 헤더 구조체{unsigned int bfSize; // 현재 구조체 사이즈int biWidth; // 이미지 가로int biHeight; // 이미지 세로unsigned short biPlanes; ..

C++에서 구조체와 클래스 차이

최근까지 흔한 커리큘럼이 C를 배우고 C++로 넘어가는 과정이었다. 두 언어를 완전히 다르게 보는 시각에서 접근해서인지는 몰라도, C++에서 구조체와 클래스의 차이를 잘못 이해하고 있는 사람들이 여럿 있는 듯 하다. 특히 C에서의 struct를 가지고 와서 C++의 struct와 동일시하면서, C++에서는 struct는 무조건 금기시 되어야 하는 것으로 분류해 무조건 class를 쓰는 게 옳다고 생각하는 오개념을 가진 사람들도 있었다. C++에서의 struct와 class의 차이를 C의 struct와 C++의 class로 잘못 비교하고 있다는 것을 알지 못한 채로 개념이 굳어져 가는 사람들이 많은 것 같다. C++을 대하는 태도와 관심 정도에 따라 이럴 수 있다고 생각하기 때문에 이를 혼동한다고 해서 큰..

C++] vector를 구조체 내 변수 기준으로 정렬하기

C++로 알고리즘 문제를 풀거나 이런 저런 이유로 코딩을 하다 보면 vector를 사용하게 되고 이 vector 내에 들어가는 값들을 정렬하기 위해서 직접 정렬을 구현해주는 방법도 있지만 좀 더 최적화되어 빠른 속도로 정렬을 수행해주는 sort함수를 사용하게 된다. 요소의 상대적 위치가 바뀌지 않는 걸 원한다면, stable_sort를 사용하면 된다. 통상적으로 자료형이 하나(예를 들어 int 하나)만 들어가는 vector라면, 시작점과 끝만 정해주면 알아서 오름차순 정렬을 수행해버리기 때문에 문제가 되지 않지만, vector 배열에 들어가는 정보가 여러 가지 자료형이 섞여 있는 구조체이고 그 구조체 안의 변수를 기준으로 정렬을 수행해야 한다면, 갑자기 머리가 아파온다. 대부분 레퍼런스를 참고하지 않거나..

C#] 구조체(Structure)

### 구조체(Structure) 참조 형식이 클래스와는 달리 구조체는 값 형식임.구조체는 상속을 지원하지 않음.(System.ValueType을 암묵적으로 상속한다는 점은 제외)구조체는 클래스가 지원하는 요소 중,매개 변수가 없는 생성자, 필드 초기화, 종료자, 가상 멤버와 보호된 멤버를 제외한 모든 요소를 지원함. 구조체는 값 형식 의미론이 바람직한 경우에 적합하며, 일례로 커스텀 수치 형식이 있음.수치 형식에서는 배정 시 참조가 아니라 값을 복사하는 것이 더 자연스럽기 때문임.구조체는 값 형식이기 때문에, 인스턴스화 시 힙에 객체를 할당할 필요가 없어 한 형식의 인스턴스를 많이 생성하는 경우 구조체가 더 효율적일 수 있음. ## 구조체 생성 의미론 구조체에는 매개 변수 없는 생성자가 암묵적으로 존재..

C#] 인덱서(Indexer)

인덱서(Indexer) 인덱서는 값들의 목록이나 사전을 캡슐화하는 클래스나 구조체에서 특정값에 자연스러운 구문으로 접근하기 위한 기능을 제공하는 멤버Property와 유사하나, 이름이 아니라 색인 변수를 통해 접근함인덱서를 사용하는 구문은 배열 사용 구문과 유사하나, 정수 이외 형식도 색인으로 사용 가능적용할 수 있는 수정자는 property의 것들과 동일함 string 클래스에는 문자열을 구성하는 특정 문자의 char 값에 int 색인을 통해서만 접근할 수 있게 하는 인덱서가 존재 class IndexerText { string[] test = "This is Text Code".Split(); public string this [int wordNum] // Indexer { get { return w..

Network] 소켓 주소 구조

1234typedef struct sockaddr { u_short sa_family; char sa_data[14];} SOCKADDR;cs sa_family주소 체계를 나타내는 16bit valueex) TCP/IP Protocol, AF_INET or AF_INET6 sa_data해당 주소 체계에서 사용할 주소 정보ex) TCP/IP Protocol IP Address and Port TCP/IP -> SOCKADDR_IN{} or SOCKADDR_IN6{}IrDa -> SOCKADDR_IRDA{} IPv4 123456789101112131415161718typedef struct sockaddr_in{ short sin_family; u_short sin_port; struct in_addr si..

728x90