본문 바로가기

프로그래밍

(67)
부동소수점 1 #include 2 int main(void) 3 { 4 printf("%x : %x \n", 1.0); 5 printf("%x : %x \n",0.0); 6 printf("%d \n",3.0); 7 } 결과 값 : 0:3ff00000 0:0 0 3 -> 2진수 : 11.0(2) 정규화 : 1.1 *2^1 프린트 버퍼의 특성상 float도 프린터버퍼로 들어가면 double로 변환되서 들어감.(실수) char(1바이트)를 넣을 때는 4바이트로(int)로 캐스팅되서 들어감. 프린트 버퍼는 4바이트씩 읽어감. #include 시스템 표준 헤더파일 #include "plming.h" 사용자 헤더파일. 현재 위치 기준
IEEE745 int형과 float형은 둘 다 4바이트로 자료형의 크기가 같은데 실제로 표현될 수 있는 값은 왜 그렇게 큰 차이가 나는 것일까? int, float 자료형의 bit구조를 알기전까지는 위와 같은 의문을 가진바가 있었다.그 의문은 컴퓨터구조라는 과목을 배우면서 해결되었다.더불어, 부동소수점 형이 의외로 신뢰할 수 없는 결과를 나을 수 있다는 것도..int 형     -2,147,483,648  ~  2,147,483,647     ( 2-31 ~ 231-1 )float형   3.4E-38 ~ 3.4E+38                   ( 3.4*10-38 ~ 3.4*1038 )int형이 42억 남짓한 수를 표현할 수 있는 반면,float형은 무려 0 이 38개나 붙는 어마어마한..
복사 생성자 클래스에서 정의하지 않아도 자동으로 생성되는 것은 기본생성자와 기본 소멸자가 있고, 또한 복사 생성자도 자동 생성된다. Point p1; // 기본생성자 호출 모양 Point p2(10,20); // 매개변수 있는 생성자 호출모양 Point p3(p2); // 복사생성자 모양 복사생성자 정의 클래스명(const 클래스명& 객체변수) { 각 멤버 값 복사 } ex) Point (const Point& p) { x = p.x; // Point 클래스 안에 x라는 변수만 있을 경우 } ============================================================================== 함수로 매개변수로 객체를 넘겨줄 때에도 복사생성자가 생성. 함수에서 리턴으로 객체를 넘..
함수포인터 3 함수 포인터를 쓰는 경우가 좋을 때.. ① 선택해야 할 함수가 두 개 이상인 경우, 예를 들어 수십개의 함수중 하나를 호출해야 한다면 함수 포인터 배열을 선언하고 그 첨자를 선택하는 것이 더 쉽다. ② 함수를 선택하는 시점과 실제로 호출하는 시점이 완전히 분리되어 있는 경우도 함수 포인터를 쓰는 것이 유리하다. 호출할 함수에 대한 조건 점검은 필요할 때 한 번만 하고 선택된 함수는 별다른 조건 점검없이 함수 포인터로 바로 호출할 수 있다. ③ 호출할 함수가 DLL같은 외부 모듈에 있고 이 함수를 동적으로 연결할 경우는 컴파일할 때 함수의 존재가 알려지지 않으므로 반드시 함수 포인터를 사용해야 한다. 함수 포인터를 사용하면 이름으로부터 원하는 함수의 번지를 찾아 호출할 수 있다. 함수포인터는 포인터 연산 ..
가상함수 #include using namespace std; class NoVirtualClass { public: int a; int b; int c; int d; void fun1() { cout
구조체 포인터 관련 struct AT{ int age; int grade; }; struct AT A[2]; struct AT *pa; pa = &A; A[0].age = 20; // ( 같은건.. pa->age = 20 ; / *pa.age = 20; ) pa++ // 다음 포인터를 가르킴. **pa.age; // age의 값을 하나 증가 시킴. 확인.. 구조체 포인터 증감 구조체를 call by Value로 주면 그 값을 모두 복사해서 전달하므로, 메모리 소모가 심하지만, call by Reference로 하면 메모리 소모가 적다 데이터 변경을 막기 위해서는 void method(const Plming &p) const로 해주면, 데이터조작을 막을 수 있다.
포인터 # 포인터 주소값 출력시 %u # 포인터 연산 관련 void main() { int m[4] = {9,8,7,6}; // int의 사이즈는 4 double *pm; // double 사이즈는 8 pm = (double*)&m; printf("%d %d %d %d\n",m[0],m[1],m[2],m[3]); printf("%u %u %u %u\n",&m[0],&m[1],&m[2],&m[3]); printf("%d %d %d %d\n",*pm,*(pm+1),*(pm+2),*(pm+3)); printf("%u %u %u %u\n", pm,pm+1,pm+2,pm+3); } 결과값 9 8 7 6 1245012 1245016 1245020 1245024 // 4씩 증가함 9 8 7 6 1245012 1245020 ..
함수포인터 2 # 함수 포인터의 포인터 함 수 원 형 : int 함수명(int) > int sum(int a) 함 수 포 인 터 : int (*함수포인터명)(int) > int (*pSum)(int a) 함수포인터 의 포인터명 : int (**함수포인터의포인터명)(int) > int (**ppSum)(int a)