모델러의 창의성은 반드시 논리적인 근거에 의해서 표현되어야만 한다.
'.NET > ADO.NET' 카테고리의 다른 글
내장 프로시저(사용법) (0) | 2010.07.10 |
---|---|
DB에 이미지 저장 / 로드 하기 (0) | 2010.06.18 |
SqlDataAdapter (0) | 2010.04.02 |
DataSet (0) | 2010.04.02 |
DataView (0) | 2010.04.02 |
모델러의 창의성은 반드시 논리적인 근거에 의해서 표현되어야만 한다.
내장 프로시저(사용법) (0) | 2010.07.10 |
---|---|
DB에 이미지 저장 / 로드 하기 (0) | 2010.06.18 |
SqlDataAdapter (0) | 2010.04.02 |
DataSet (0) | 2010.04.02 |
DataView (0) | 2010.04.02 |
char형 포인터를 선언하였다.
문자열에 대한 간단한 이해를 해보자.
char *temp_p;
char temp;
temp_p = 'a'; //'a'는 문자로서 아스키코드로 숫자화되있다. 이것을 temp_p에 반환하는것은 말이안된다. temp_p는 주소만을 받는 포인터이다.
temp_p = "a";
temp = 'a';
temp = "a"; //문자열을 반환하게되면 첫번째 문자열이 저장된 첫번째 위치의 주소값이 반환되는데 temp는 char형이기 때문에 값을 받을 수 없다.
2차원 포인터 배열 (0) | 2010.05.25 |
---|---|
배열포인터의 특징 (0) | 2010.05.25 |
2차원 배열포인터와 대상체 (0) | 2010.05.20 |
배열과 포인터 (0) | 2010.05.19 |
포인터란? (0) | 2010.05.19 |
문자열 포인터 (0) | 2010.05.25 |
---|---|
2차원 포인터 배열 (0) | 2010.05.25 |
2차원 배열포인터와 대상체 (0) | 2010.05.20 |
배열과 포인터 (0) | 2010.05.19 |
포인터란? (0) | 2010.05.19 |
2차원 배열 포인터란 2차원 배열을 담는 포인터이다.
int temp_array[3][2] = {{0,1},{3,5},{7,9}}; //2차원 배열
int (*temp)[2]; //2차원 배열포인터
temp = temp_array;
2차원 배열은 이렇게 2차원 배열포인터를 이용해서 가르킬수 있다.
아래서는 대상체에 대해서 개념을 이해해보자.
대상체란 말 그대로 가르키는 대상이 무엇이냐인데 아래를 보자.
이번엔 더 분명하게 대상체에 대해서 sizeof를 통해서 알아보자.
int (*temp)[2]; //*temp는 2개의 대상체를 가지고있는 배열을 가르킨다 라고 생각하자.
int temp_array[3][2] = {{0,1},{3,5},{7,9}};
temp = temp_array;
cout<<temp_array<<endl;
cout<<temp_array[0]<<endl;
cout<<&temp_array[0][0]<<endl;
cout<<sizeof(temp_array)<<endl;
cout<<sizeof(temp_array[0])<<endl;
cout<<sizeof(&temp_array[0][0])<<endl;
우선 간단히 배열이란 무엇인지 생각해봐야한다.
int temp1;
int temp2[10];
temp라는 변수명을 가진 변수는 4바이트지만
temp2는 하나의 변수명으로 무려 10개의 int형 변수를 10개를 만든 것이다.
배열의 특징 세가지를 정리하면
1. 배열명은 주소를 뜻한다.
2. 배열명은 배열의 첫번째 배열 요소의 주소를 뜻한다.
int temp_array[3] = {1, 3, 5};
int *temp;
temp = temp_array;
cout<<*temp<<endl;
cout<<*(temp+1)<<endl;
cout<<*(temp+2)<<endl;
cout<<temp_array<<endl; //배열명을 출력해보았다. 주소가 나온다.
cout<<temp_array+1<<endl;
cout<<temp_array+2<<endl;
cout<<*temp_array<<endl; //이렇게 배열명을 역참조를 해보면 값이 나온다.
cout<<*(temp_array+1)<<endl;
cout<<*(temp_array+2)<<endl;
3. 배열명에는 주소를 할당 할 수 없다. 배열명은 포인터변수가 아니라 배열명 자체일 뿐이다.
말 그대로 할당 할 수 없다
temp = temp_array;
temp = temp_array+1;
가능하다. 포인터에 배열의 주소값들이 들어갈수있을것이다.
temp_array = temp;
temp_array = temp+1;
불가능하다. 배열에는 포인터가 아니라 값이 들어가야 한다.
--------------------------------------------------------------------------------------------------------
알아본 결과 예전에는 temp_array 는 배열 상수일뿐이고 저장된 영역이 없기때문에 출력하라는거 자체가 말이 안되서 오류가 났다고 한다. 하지만 ANSI에서 배열명에 &연산자를 허용해주어서 에러가 안나는것이라 한다.
그러므로 &temp_array 자체가 말이안되는 것이다. temp_array+1은 첫번째 주소에서 자료형크기만큼 &temp_array+1 는 배열명 크기만큼 커진다는 것만 이해해야겠다.
&temp_array는 어떠한 대상을 가르키고 있는것이 아닌 그냥 주소값일뿐 그래서 sizeof를 하게되면 4가나오게된다.
문자열 포인터 (0) | 2010.05.25 |
---|---|
2차원 포인터 배열 (0) | 2010.05.25 |
배열포인터의 특징 (0) | 2010.05.25 |
2차원 배열포인터와 대상체 (0) | 2010.05.20 |
포인터란? (0) | 2010.05.19 |
포인터란?
포인터는 번지에 대한 기호화된 표현을 말한다.
즉, 주소를 말한다고 할 수 있다.
int temp;
temp라는 이름을 가진 변수가 선언되면
int형은 4바이트 메모리로 시스템이 할당을 해주고
각 바이트들은 다 주소가 있게 마련이다.
그 주소들이 포인터가 되는것이다.
포인터변수란?
말 그대로 포인터들을 담는 변수가 되는 것이다.
포인터변수에는 주소들만 저장할수 있게된다.
예를 들어 int *temp 이런식으로 포인터변수 정의를 할수 있는데
이렇게 되면 정수가 저장된 곳의 위치를 가르킬 수 있게 되는 것이다.
그러므로 temp = 5; 이런식의 표현은 되지않는다.
int *temp;
int t = 2;
temp = &t;
cout<<*temp; 이런식으로 하면 temp포인터변수가 가르키고있는 값 2가 출력하게된다.
cout<<temp; temp포인터변수에있는 가르키고있는 포인터가 출력된다. 즉, 주소가 출력된다.
cout<<&temp; temp포인터변수에 주소가 출력된다.
물론 주소는 4바이트니까 연속적으로
0x12FF60
0x12FF61
0x12FF62
0x12FF63
저장되지만 &temp로 출력을 하게되면 가장앞에 주소(60)가 출력되게된다.
문자열 포인터 (0) | 2010.05.25 |
---|---|
2차원 포인터 배열 (0) | 2010.05.25 |
배열포인터의 특징 (0) | 2010.05.25 |
2차원 배열포인터와 대상체 (0) | 2010.05.20 |
배열과 포인터 (0) | 2010.05.19 |
유전 알고리즘 (0) | 2010.06.10 |
---|---|
영향력 분포도 (0) | 2010.06.10 |
트리의 배열표현 방법 (0) | 2010.05.14 |
큐 만들기 (0) | 2010.05.14 |
스택만들기 (0) | 2010.05.13 |
영향력 분포도 (0) | 2010.06.10 |
---|---|
연결리스트를 이용한 이진트리의 순회방법 (0) | 2010.05.14 |
큐 만들기 (0) | 2010.05.14 |
스택만들기 (0) | 2010.05.13 |
LCD 디스플레이 (0) | 2010.05.13 |
큐는 스택과는 다르게 FIFO 방식으로 먼저 들어온 녀석이 먼저나가는 방식이다.
그냥 일반큐를 만들어보았다.
구조체를 이용해 front, rear, count, q 를 하나로 통합시켰다.
typedef struct{
int q[QueueSize+1];
int front;
int rear;
int count;
}queue;
front에서는 Dequeue할 원소를 가르키고 있고 rear에서는 삽입할 자리를 가르키고있다. 또 count를
이용해 Deque나 Enqueue가 가능한지 확인하도록 사용하였다.
연결리스트를 이용한 이진트리의 순회방법 (0) | 2010.05.14 |
---|---|
트리의 배열표현 방법 (0) | 2010.05.14 |
스택만들기 (0) | 2010.05.13 |
LCD 디스플레이 (0) | 2010.05.13 |
여행(The Trip) (0) | 2010.05.11 |