Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 맛집
- 감상
- 아이폰게임
- 카이로소프트
- 아이폰
- 강추
- jQuery
- 게임
- great forest
- Monument Valley
- 후기
- 아이러브니키
- php
- 모뉴먼트
- 아이패드
- 추천
- 잡담
- 공략
- 모뉴먼트 밸리
- JavaScript
- 유료
- Monument
- 핑크
- goblin sword
- 레고
- 가사
- 영화
- Pink
- 일상
- 시사회
Archives
- Today
- Total
잡담소장소
기밀태씨 강의 본문
1. 포인터의 기본.
#include <stdio.h>
typedef struct _IntStruct
{
int val;
} IntStruct;
void changeValue(int *a)
{
*a = 10; //받은 주소값에 해당하는 저장된 값을 변경
}
void changeStruct(IntStruct *s)
{
s->val = 20; //받아온 포인터를 이용한 값 변경
}
void makeStruct(IntStruct **s) //포인터의 주소값의 주소값을 가져옴
{
IntStruct* tmp;
tmp = (IntStruct*) malloc(sizeof(IntStruct));
tmp->val = 30;
*s = tmp; //주소값의 주소값을 바꿈 ( 아무런 값이 없는 10001번 주소의 struct를 val이 30인 10002번 주소의 struct로 덮어 씌움
}
int main()
{
int a;
IntStruct* b;
IntStruct* c;
a = 0;
changeValue(&a); // 주소값 넘김
printf("%d\n", a);
b = (IntStruct*) malloc(sizeof(IntStruct));
b-> val = 0;
changeStruct(b); //포인터 자체를 넘김
printf("%d\n", b->val);
makeStruct(&c); //포인터의 주소값을 넘김
printf("%d\n", c->val);
free(c);
return ;
}
우리는 C의 포인터와 malloc을 배웠어요
malloc은 보통 구조체에 사용할 메모리를 할당하는데 쓰지요
C++에서는 클래스와 객체가 도입되었는데
사실 C++에서 클래스와 구조체는 완전히 똑같습니다.
대신 다른 점은
C에서 할 수 없었던
private, public같은 access modifier와
그리고 구조체에 고유의 함수를 정의할 수 있다는 점이죠
자 그럼 C의 구조체와 C++의 구조체의 차이를 알아봤으니
둘 사이의 생성 방식도 다르다는 것과
어떻게 생성하는지 원리를 볼까요
C에서는 구조체를 malloc을 이용해서 보통 생성하죠?
근데 여기에는 귀찮은 점이 있어요.
malloc은 메모리를 할당만 하지
그 안에 값을 어떻게 해야 할지는 전혀 상관하지 않아요
그래서
구조체에 int가 선언되었다면
그 안에 값이 0일 거라고 생각하면 매우 오산이예요
메모리에 무슨 값이 들어있을지 모르니까
그러니까 구조체를 쓰려면 원래
처음에 메모리를 할당 받아서 그 안에
무슨 값이 초기값으로 들어가 있을지를
써주어야 해요.
그래서 C++을 만든 훌륭한 사람들은
생성자 라는것을 고안해 냈지요
생성자란 객체에 메모리가 할당되면
어떤 함수가 반드시 호출 되도록 만든거예요
그래서 사실 생성자는 두가지 일을 해요
1. 객체가 생성될 수 있도록 메모리를 할당합니다.
2. 생성자 함수를 호출해서 객체를 초기화하게 해줍니다.
여기까지 오케이?
이건 우리가 잘 아는 php도 똑같아요.
typedef struct _IntStruct
{
int val;
} IntStruct;
void changeValue(int *a)
{
*a = 10; //받은 주소값에 해당하는 저장된 값을 변경
}
void changeStruct(IntStruct *s)
{
s->val = 20; //받아온 포인터를 이용한 값 변경
}
void makeStruct(IntStruct **s) //포인터의 주소값의 주소값을 가져옴
{
IntStruct* tmp;
tmp = (IntStruct*) malloc(sizeof(IntStruct));
tmp->val = 30;
*s = tmp; //주소값의 주소값을 바꿈 ( 아무런 값이 없는 10001번 주소의 struct를 val이 30인 10002번 주소의 struct로 덮어 씌움
}
int main()
{
int a;
IntStruct* b;
IntStruct* c;
a = 0;
changeValue(&a); // 주소값 넘김
printf("%d\n", a);
b = (IntStruct*) malloc(sizeof(IntStruct));
b-> val = 0;
changeStruct(b); //포인터 자체를 넘김
printf("%d\n", b->val);
makeStruct(&c); //포인터의 주소값을 넘김
printf("%d\n", c->val);
free(c);
return ;
}
2. object c에서의 객체 생성과 소멸
생성자: 클래스 객체를 생성하고 초기화하는 메소드
소멸자: 메모리가 할당된 객체의 메모리를 회수
이하 네이트온 대화 발췌 (-_-;;)
code 태그를 쓰고싶은데 왜 못쓰는가..
tistory는 제공해달라 ㅠㅠ 해달라 ㅠㅠ
반응형
'Study ;3' 카테고리의 다른 글
What is Node.js ? (0) | 2012.12.04 |
---|---|
SyntaxHighlighter Test (0) | 2012.07.20 |
리마인드용 개발 이야기 (0) | 2012.05.08 |
프로시저 isqlplus에서 실행하는 방법 (0) | 2012.04.18 |
javascript의 이런 저런 (0) | 2012.04.17 |
Comments