@ 16. 1 ~ 17. 1/C++
-
369숫자를 찾아 *로 표시하기@ 16. 1 ~ 17. 1/C++ 2013. 2. 18. 23:23
숫자를 입력하고..369의 숫자만큼 *로 표시하는것..클래스로 구현... 200제 풀다가 ..생각나는것들은 올리는 중..그냥 뭐 그렇다고..ㅜㅜ #include #include #include #include #include using namespace std; class ThreeSixNine { private: int num; public: ThreeSixNine(int num); int GetSize(int num); bool Search(int num); int Test369(int num); void ShowData(); }; int main() { ThreeSixNine t(100); t.ShowData(); getch(); return 0; } ThreeSixNine::ThreeSixNine..
-
참조와 포인터(2)@ 16. 1 ~ 17. 1/C++ 2013. 2. 13. 22:47
클래스를 그대로 함수에 전달하면 복사본이 만들어진다는 것은 기본 중에 기본 포인터나 참조를 이용하면 훨씬 좋다. 하지만 그냥 전달시 복사본이 생성되어 값이 변경되지 않지만.. 포인터나 참조를 이용하면 값이 변경된다. 그래서 int sum(const T *t){ ... } 이런식으로 const를 선언한다. 그런데 위험물인 포인터말고..참조로 바꿔보자.. int sum(const T &t) { .... } 호출시에는 int r=sum(t); int와 float이외 클래스를 함수에 전달할 때는 대개 참조를 사용한다고 한다? 우와..편하다..!! !! 근데 문제점이있단다..? 참조 문제점 int r=sum(t); 를 보자.. 이게 과연..그냥 객체를 넣은것인지..참조형태로 넣은것인지...이것만 보고 누가 알 수..
-
참조와 포인터(1)@ 16. 1 ~ 17. 1/C++ 2013. 2. 13. 22:09
참조와 포인터 포인터는 &를 붙여서 주소로 만들어야하지만 참조는 그럴 필요가 없다. int a = 5; int &ref=a; int *ref=&a; 사용시 포인터는 *를 붙이지만 참조는 없어도된다. ref=10; *ref=10; 참조만의 특징 1. 초기화가 필요하다 포인터의 경우 무엇을 가리키는지 알 수 없는 것도 만들수 있다. int *ptr; 하지만 참조의 경우 int &ref; 는 안된다. 2. 가리키는 대상을 변경할 수 없다. 포인터는 도중에 가리키는 대상을 변경할 수 있다. int a; int *ptr=&a; int b; ptr=&b; 이런식으로 변경이 가능하지만 참조는.. int &ref=a; ref=b; 이러면 에러다.. 3. 첨자를 붙일 수 없으며 숫자도 더할 수 없다. 포인터의 경우 in..
-
분할컴파일시..extern, static@ 16. 1 ~ 17. 1/C++ 2013. 2. 12. 21:08
전역변수 선언시.. 헤더파일에 선언을 할경우..(가급적 하지말란다..아니 좋은 습관이 아니란다..) 여러개의 소스파일에서 include시 충돌이 난다.. 그럴경우..헤더파일에는 선어만 실시하고..extern int a; 이런식으로.. 실제 소스파일에서 그것을 정의하면 된다는..물론 헤더파일을 include하고.. extern 은 외부변수를 사용할때 사용한다. 만약 앞에 static을 붙이게 되면 extern을 붙여 사용해도 다른곳에서 사용못한다. 헤더가 아닌 소스파일에서 static으로 선언하고 그값에 접근할 수 있는 함수를 만든다는데...외부소스에서도 접근이 가능한.. 뭐 아무튼 ..헤매서 정리해둠..
-
포인터 정리(4)@ 16. 1 ~ 17. 1/C++ 2013. 1. 31. 23:12
int *np int형 포인터 변수로 4byte이며 int형 주소를 저장한다. int **npp; 2차원 포인터 변수로 4byte이고 1차원 포인터 변수의 주소를 저장한다. int arr[3]; int형 배열로 int형 메모리 3개를 갖는 12byte 메모리이다. int arr[2][3]; int형 2차원 배열로 int형 6개를 갖는 24byte 메모리이다. int *arr[3]; int형 주소를 3개까지 저장하는 배열로 각 배열요소(arr[0]...)가 int형 주소를 저장한다. 총 12byte 이다. int(*arr)[3]; 포인터 변수로 4byte이며 2차원 배열과 같은 열의 개수가 3개인 int형 배열의 시작주소를 저장하기 위해 사용하여 4byte이다. 예) int arr[2][3]; int(*a..
-
void 형 포인터 및 함수 포인터(3)@ 16. 1 ~ 17. 1/C++ 2013. 1. 31. 21:37
void형 포인터란 모든형(char int double 등)의 주소를 저장할 수 있는 포인터이다. char형과 int형 주소 모두를 저장해야하는 경우라면..void포인터를 사용하여 저장해야한다. int num=1; char a='a'; void *vp; vp=# vp=&a; 이렇게 가능은 한데..즉 주소를 저장할 수는 있지만.. *vp 처럼 주소가 가지고 있는 값에는 접근을 못한다. 어떤 형태로 접근해야할지 모르니까...근데 형변환을 하면 가능해진다. 즉, *(int*)vp; *(char*)vp 이런식으로.. 함수포인터란.. 함수의 시작주소를 저장할 수 있는 포인터 변수이다. 모든 함수의 이름은 그 함수가 시작주소이다.. 함수의 원형을 알면..함수 포인터를 만들수 있다. void main(void..
-
포인터와 문자열(2)@ 16. 1 ~ 17. 1/C++ 2013. 1. 31. 20:24
int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 2차원 배열을 int (*app)[3] = arr; 2차원배열을 가르키는 포인터 그리고.. int arr[3] = {1,2,3}; 1차원 배열을 일경우... int (*app)[3]=(int(*)[3])arr; 2차원배열을 가르키는 포인터로 변환해서.. 이런식으로하면...물론 일부에는 쓰레기값이 들어가긴하지만.. 접근시에도 app[0][1] 이런식이 가능.. 반대로 2차원 배열을 1차원 배열로..하면.. int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int *app = (int*)arr; 이런식으로 형변환을 해주면..app[8]로 접근이 가능하다. int arr[3][3]={{1,2,3},{4,5,6},{..