본문 바로가기

Programming

(86)
Void형 포인터 ㅁ void형 포인터 포인터형 변수는 선언할 때 반드시 대상체의 타입을 밝혀야 한다. 가리키는 대상체의 타입을 알아야 *연산자로 대상체를 읽을 수 있고 증감 연산자로 전후 이동이 가능하다. 이런 일반적인 포인터에 비해 선언할 때 대상체의 타입을 명시하지 않는 특별한 포인터형이 있는데 이것이 바로 void형 포인터이다. void형 포인터를 선언할 때는 void *타입을 지정한다. void *vp; 이렇게 선언하면 vp 포인터 변수의 대상체는 void형이 되며 이는 곧 대상체가 정해져 있지 않다는 뜻이다. void형은 함수와 포인터 변수에게만 적용되는 타입이므로 일반 변수에는 쓸 수 없다. void i;라는 선언문은 불법이다. 다음은 void형 포인터의 특징들이되 모두 대상체가 정해져있지 않다는 사실에 기인..
MultiByteToWideChar 사용 ㅁ 사용방법(Char -> WCHAR(유니코드형식)) char* test = L"Test"; TCHAR* wcTest; //먼저 사이즈를 알아내서 메모리를 할당한다. int nLen = MultiByteToWideChar(CP_ACP, 0, test, strlen(test), NULL, NULL); wcTest = (TCHAR*)calloc(nLen*sizeof(TCHAR)); //스트링을 변환한다. MultiByteToWideChar(CP_ACP, 0, test, strlen(test), wcTest, nLen*sizeof(TCHAR)); ㅁ 사용예제(접속한 주소값 알아내기) char* ConnectUserAddr = ::inet_ntoa( fromAddr.sin_addr ); int iSrcLengt..
함수와 함수포인터의 차이(void* point) void main() // 이것은 'return되어질 값이 없음'이라는 뜻 void *main() // 이것은 '형이 없는 포인터 값이 return된다'라는 뜻 void 포인터 형은 메모리를 액세스하기위한 정보가 없기때문에 반드시 사용자가 컴파일러에게 어떤형으로 엑세스를 하겠다고 알려줘야 합니다. ex) 보이드 포인트의 사용예 void *p; int n=100; p= &n; printf("void *p : %d", *(int *)p); 출력 void *p: 100 포인터를 배우셨으면 아시겠지만 p값에 n의주소를 대입해주었고. p를통해 n의 값을 엑세스하기위해 *(int *)p라는 식을 써써 n의 값을 얻었습니다. *(int *)p는 int형으로 p가 가르키는 값을 엑세스하겠다는 뜻입니다. void*는 주..
문자형식과 숫자형식으로 상호 변형 (atoi, itoa) (헤더파일 : stdlib.h, wchar.h) 문자형식을 숫자형식으로 int atoi (const char *str); // 문자열을 숫자형식으로 바꾼다. - str : 숫자형식으로 변환할 문자열의 포인트 int _wtoi(const wchar_t *str); // 유니코드 문자열을 숫자형식으로 바꾼다. - str : 숫자형식으로 변환할 문자열의 포인트 반환값 : - 입력된 str값을 유효 숫자 형식으로 바꿉니다. 예로 "abc123"이 있으면 "abc"는 문자 형식이므로 삭제. "123"만 숫자 형식 123으로 변환됩니다. 만일 "abcd"같은 유효 숫자 형식이 없으면 0이 반환됩니다. 변환되는 값이 integar범위보다 크거나 작으면 INT_MIN 혹은 INT_MAX가 반환이 됩니다. ex) cha..
범위(scope)연산자 ㅁ 범위 연산자 사용의 예 // 범위(scope) 연산자 -> :: // 단항 : 전역 범위 // 이항 : 클래스 범위 #include int intNum = 123; //전역변수 main() { int intNum = 321; //로컬변수 cout
연산자 오버로딩(전역 연산자 함수로 작성법) 클래스의 연산자 함수를 정의하는 방법은 다음 두가지가 있다. ① 클래스의 멤버 함수로 작성한다. ② 전역 함수로 작성한다. ② const Time operator+(const Time &T1,const Time &T2) //받는 인수가 2개이다. { Time R; R.sec=T1.sec + T2.sec; R.min=T1.min + T2.min; R.hour=T1.hour + T2.hour; R.min += R.sec/60; R.sec %= 60; R.hour += R.min/60; R.min %= 60; return R; } ㅁ 멤버 연산자와 전역 연산자의 차이 A+B -> 멤버 : A.operator +(B) -> 전역 : operator + (A,B)
연산자 오버로딩(클래스의 멤버 함수로 작성법) 클래스의 연산자 함수를 정의하는 방법은 다음 두가지가 있다. ① 클래스의 멤버 함수로 작성한다. ② 전역 함수로 작성한다. 그 중 1번에 해당하는 방법을 알아보자. ① 리턴타입 Class::operator 연산자(인수 목록) { 함수 본체; } ex) const Complex operator+ (const Complex &T) const { //(리턴타입) (함수이름) (인수(피연산자) (상수함수) Complex R; R.image = image + T.image; R.real = real + T.real; return R; } //inline 함수로 작성 예 ㅁ main에서의 사용법 : A+B A.operator + (B) //A는 연산자함수를 호출하는 객체 //B는 연산자함수로 전달되는 객체 ㅁ co..
Sleep 함수 이해 및 사용법 Sleep는 Thread를 정지시키는 것입니다. Sleep 앞에 대문자로 사용에 주의하며 대문자가 싫으시다면 _sleep도 가능 #include #include // Sleep 가 들어갈 헤더로windows.h 를 사용 void main(void) { while(1) { printf("sleep 의 뜻을 이해하자"); Sleep(3000); //Sleep 스레드를 3초간 정지시킵니다 .. 1000=1 } } 무한루프 시 CPU 할당량이 100%로 올라가는 걸 방지 할 수있다.

반응형