#include <stdio.h>
#include <malloc.h>
//06.2.13 오늘 정리
// 1. 배열 포인터 모양. typedef 모양 외우세요.
// 2. 함수 포인터 모양. typedef 모양 외우세요.
// 3. 복잡한 표현식 -> 별로 쓸모는 없지만 그래도..!!!
// 4. 가변인자 함수 만들기 -> printf의 원리
// 5. void* 개념..예제..
// 숙제
// 1. 10page를 typedef를 사용해서 이해하기 쉽게 만들기
// 2. sort를 void포인터를 사용하여 모든 pointer를 받도록 수정 할것.
// 결국 C 표준 함수인 qsort()의 모양이 될겁니다.
// 자신 있는 분은 카페...없는 사람은 메일로 보내세요...
// 각종 문법을 어떻게 처리할지 컴파일러에게 지정 -> 표현식은 컴파일러마다 다르지만
// 모든 컴파일러 마다 이런 개념이 있다.
// #pragma : 컴파일러나 링커에게 명령을 할때 사용한다. !
#pragma warning(error:4133) //4133은 에러로 취급해라.(option disable -> warning도 안뜬다.)
// 5 page : void * 이야기 - 오늘의 마지막 주제
// 1. void*의 의미 : 모든 주소를 담을수 있다...
// 2. void*는 크기가 필요한 연산은 할수 없다.!!!
// 3. 왜 void* 가 중요한가? - 모든 type을 처리할수 있게 된다.
// Linux 와 윈도우를 배울때 스레드 함수라는 것이 나옵니다.
// 이 함수에는 다양한 type의 인자를 넘길수 있습니다. - 용도에 따라 모든걸 넘길수 있습니다.
//Window 스레드 함수 인경우.
//long foo(void* p) // void* -> 아주 다양한 type이 전달 될수 있다는 의미.!!!!!!!**
//{
//}
// Code Reading - Code를 읽는 방법에 대해서.. 즉 관용구를 잘 설명해 준다.
// swap은 1개만 만들자 -> 모든 type이 다 동작하게 하자.
// 1. 인자는 void*로
// 2. void*는 사용전에 주로 다른 type으로 변경한다. - 주로 char*
// 3. void*가 함수인자일경우 그 크기가 넘어가야 하는 경우가 많다.
void swap(void *p1, void *p2, int s)
{
int i;
char *p3 = (char *)p1;
char *p4 = (char *)p2;
char t;
for(i=0; i<s; ++i)
{
t = *(p3+i);
*(p3+i) = *(p4+i);
*(p4+i) = t;
}
}
typedef struct _People
{
char name[256];
int age;
} People;
void main()
{
People p1 = { "AAA", 20 };
People p2 = { "BBB", 10 };
swap( &p1, &p2, sizeof(p1)); //구조체도 OK...
printf("%s \n", p1.name); //BBB
printf("%d \n", p1.age);
/*
double a = 10;
double b = 20;
swap(&a, &b, sizeof(a));
printf("a = %f\n", a);
printf("b = %f\n", b);
*/
}
/*
void main()
{
int n = 10;
void* p = &n;
// p가 100번지라고 가정.
//p = p + 1; //p는 얼마나 될까?? error 크기를 알수 없다.
int k = *p; // k에 얼마나 들어갈까? - 크기가 필요하다. error
}
*/
/*
void main()
{
int n = 10;
//char* p = &n; //? char* = ∫
//--------------------------------
//void a; //error
void* p = &n; // void* : 모든 종류의 주소를 담을수 있다.
// 모든 주소는 void*로 암시적 형변환 된다.
int* p2 = p; // int* <= void* In C - OK...
// IN C++ 에서 Error
// 하지만 이경우 명시적으로 casting하는 것이 좋다.
int* p3 = (int *)malloc(sizeof(100)); //malloc의 리턴값은 void* 이다.
// int *p3 = void *;
//
}
*/
'프로그래밍' 카테고리의 다른 글
WPF 및 Win32 상호 운용성 개요 (0) | 2009.08.27 |
---|---|
MS Access2007에서 DBCC 명령(인덱스 초기화) 하기... (3) | 2009.07.23 |
Valiable Arguments (0) | 2009.07.19 |
typedef에 관하여 (0) | 2009.07.19 |
Quick Sort (0) | 2009.07.19 |
댓글