본문 바로가기

전체 글

(480)
함수포인터 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)
배열 배열 정의 : 동일한 자료형으로된 기억 장소들의 모임 기억장소의 일괄처리
함수 포인터 int func(int a) { return a*2; } void main() { int i; int (*pf)(int a); pf=func; i=(*pf)(2); // i =pf(2) ; 도 사용 가능. printf("%d\n",i); }
volatile 결론: 컴파일러가 코드에 작성한 그대로 컴파일 해라. 혼자 스스로 최적화 하지 말아라. 전역변수 사용 시에 필요(다수의 프로세스가 접근 가능할 경우에..) [winapi 사이트 펌] volatile volatile 키워드는 const와 함께 변수의 성질을 바꾸는 역할을 하는데 이 둘을 묶어 cv 지정자(Qualifier:제한자라고 번역하기도 한다)라고 한다. const에 비해 상대적으로 사용 빈도가 지극히 낮으며 이 키워드가 꼭 필요한 경우는 무척 드물다. 어떤 경우에 volatile이 필요한지 다음 코드를 보자. int i; double j; for (i=0;i