공용체와 구조체 비트필드 공용체 UNION - 차례대로 메모리 할당되는 구조체와 달리 같은 메모리 공간을 여러 멤버가 공유하는 사용자 정의 자료형 - 구조체와 메모리 할당구조가 다름 - 가장 큰 자료형의 크기만큼 메모리 공간이 할당되며 모든 멤버는 시작주소가 동일 - 하드웨어 제어시 애용 #include int main() { union UNI { char x; short int y; long int z; } uni; printf("union size : %d\n", sizeof(uni)); printf("%p, %p, %p \n", &uni.x, &uni.y, &uni.z); uni.z = 0x12345678; printf("%x %x %x \n", uni.x, uni.y, uni.z); return ..
구조체와 구조체포인터 구조체 구조체 정의 - 서로 다른 타입의 멤버라고 하는 값들의 통합 자료형 - 사용자 정의 타입 * cf ) 배열 : 같은 타입의 데이터 모임 구조체 선언 #include // 변수 아니고 멤버 struct SCORE { char name[20]; int kor; int math; int eng; float avg; }; int main() { // 구조체 변수 struct SCORE st1 = {"홍길동", 50, 78, 95}; printf("%d, %d \n", sizeof(st1), sizeof(struct SCORE)); printf("&st1 : %p, %p\n", &st1, st1.name); st1.avg=(st1.kor+st1.math+st1.eng) / (float..
가변 인자 가변인자 특성 - 함수 인자의 수가 정해져있지 않은 함수 - C는 객체지향과 달리 함수명으로만 함수를 구분 - 인자리스트만 다를 경우, 가변인자 함수를 작성하면 하나의 함수로 가능 - 가변인자를 위한 매크로有 - 고정할당 뒤에 차례대로 저장됨 형태 int 함수명(인자, …) * …; 인자 생략 가능, 여러개 전달 가능 가변인자를 위한 매크로 특성 - ANSI C에서는 이식성을 높일 목적으로 가변길이 인수를 사용하기 위한 매크로를 제공 - 헤더파일 : #include - va_start / va_arg / va_end va_start(list,fix) - 리스트를 초기화 - 리스트 포인터 고정 다음인자의 시작주소를 리스트에 저장함 - va_list : 헤더파일에 어떤 주소도 대입받을 수 있는 v..
[고급 C++]포인터 1편(프로세스/포인터변수/포인터연산/NULL포인터) 프로세스 프로세스 정의 메모리에서 실행중인 프로그램 특징 - xx번지라고 하는 주소 개념을 가짐 - 메모리 주소 공간은 스택 세그먼트 / 힙세그먼트 / 데이터 / 코드 세그먼트로 구분 - 제한된 공 mk28.tistory.com [고급 C++]포인터 2편(배열과 포인터) 배열과 포인터 1차원 배열과 포인터 배열 특성 - 배열의 이름은 배열의 시작주소(num = &num[0] =배열의 시작주소) - 연속적인 메모리 할당 보장 1 #include 2 int main() 3 { 4 int num[5] = {1.. mk28.tistory.com [고급 C++]포인터 3편(배열 포인터/포인터 배열/문자열 상수 포인터) [고급 C++]포인터 ..
주의하세요! PC에서 동영상 편집을 위해 동영상 편집기가 필요해 '윈도우 무비 메이커'를 검색했는데 더이상 지원하지 않는다고만 하고 내가 찾는 무비 메이커는 보이지 않았다. 그래도 진짜 편집기가 필요해서 열심히 찾아보았다. 그러다가 "2020 신버전 윈도우 무비 메이커 " 라고새로운 버전이 출시되었다는 글을 발견했다. UI가 많이 달라졌다고 생각했다. 무료 버전으로 다운받았는데, 쓸만해서 보니 워터마크가 박혀있다. 워터마크 없이 사용하려고 4만원 덜 되는 돈을 유료 결제했다. 근데 나중에 보니까 무슨 이상한 곳에서 결제가 됐다. 어이가 없었는데 나중에 보니까 마이크로소프트에서 발행된 프로그램이 아니었다. 자세히보니 이름도 Windows도 아니고 그냥 Window 더라.. 절대 공식적인, 우리가 알던 Wi..
[고급 C++]포인터 1편(프로세스/포인터변수/포인터연산/NULL포인터) 프로세스 프로세스 정의 메모리에서 실행중인 프로그램 특징 - xx번지라고 하는 주소 개념을 가짐 - 메모리 주소 공간은 스택 세그먼트 / 힙세그먼트 / 데이터 / 코드 세그먼트로 구분 - 제한된 공 mk28.tistory.com [고급 C++]포인터 2편(배열과 포인터) 배열과 포인터 1차원 배열과 포인터 배열 특성 - 배열의 이름은 배열의 시작주소(num = &num[0] =배열의 시작주소) - 연속적인 메모리 할당 보장 1 #include 2 int main() 3 { 4 int num[5] = {1.. mk28.tistory.com 배열포인터 다차원 배열의 시작주소를 저장하여 데이터로 사용하는 포인터 변수를 의미 * 2차원 배..
배열과 포인터 1차원 배열과 포인터 배열 특성 - 배열의 이름은 배열의 시작주소(num = &num[0] =배열의 시작주소) - 연속적인 메모리 할당 보장 1 #include 2 int main() 3 { 4 int num[5] = {100, 200, 300, 400, 500}, i; 5 int *p1; 6 7 printf("%d, %d \n", sizeof(num), sizeof(num[0])); 8 9 printf("\n"); 10 for(i = 0; i < 5; i++) 11 printf("%p: %d \n", &num[i], num[i]); // 연속된 메모리 보장 12 13 return 0; 14 } :!a.out 20, 4 7ffff0f0: 100 7ffff0f4: 200 7ffff0f8: 3..
프로세스 프로세스 정의 메모리에서 실행중인 프로그램 특징 - xx번지라고 하는 주소 개념을 가짐 - 메모리 주소 공간은 스택 세그먼트 / 힙세그먼트 / 데이터 / 코드 세그먼트로 구분 - 제한된 공간에 적재하기 위해 운영체제가 관리 메모리 주소공간 - 메모리에 할당된 모든것은 시작주소가 있음 - 메모리 공간 1) 스택 세그먼트 : 지역변수 저장(임시데이터 저장공간) 2) 힙 세그먼트 : 동적메모리 할당 요청시 사용되는 공간 3) 데이터 세그먼트 : 전역변수, 정적변수 저장 4) 코드 세그먼트 : 프로그램의 실행코드와 함수 저장 포인터 포인터 정의 실행중인 프로세스의 임의의 주소 특징 메모리 공간의 주소를 확인하고 제어할 수 있는 자료형으로 메모리를 직접 조작할 수 있음 포인터 자료형 - 1) 포인터 선언..
조건 컴파일 전처리기의 이해 전처리란 원시 소스파일을 컴파일하기 전에 행해야 할 작업 특징 - 프로그램이 컴파일되기 전에 선행 - #으로 시작 - ;로 끝나면 안됨 매크로 상수 - #define 문을 이용하여 정의하는 상수 - 프로그램 전체에서 텍스트 대치를 선행처리기에게 알림 - 일련의 문자들이 다른 문자로 대치되는 매크로 대치 과정 조건컴파일 - 프로그램 코드의 일부가 선택적으로 컴파일될 수 있게함 - 지시자 : #if #elif, ,#else, #endif, #ifdef, #ifndef - 헤더파일의 중복 문제 #ifndef _POINT_H_ #define _POINT_H_ struct Point { int x, y; } pos; #endif ※ 시스템 헤더파일은 한번만 정의되도록 설계 vi /us..