컴퓨터 활용 (포인터)
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

컴퓨터 활용 (포인터)에 대한 보고서 자료입니다.

목차

C언어의 포인터
널 포인터(NULL Pointer)
아스키코드
배열의 포인터
포인터의 포인터
포인터의 형변환
동적할당

본문내용

것이다.
거기다가 아래의 코드처럼*연산으로 임의의 수를 저장하면 프로그램에 치명적인 결과를 가지고 올 수 있다.
int main(void)
{
int *pnum;
*pnum=200;
}
그렇다면 초기값을 대충 1234로 하면 안 된다. 왜냐하면 이 1234번지가 메모리의 어디에 있는지 알 수 없다. 고로 쓰레기 값으로 채우는 것과 다를 바 없다.
그럼 방법이 없지 않은가?라고 할 수 있다. 하지만 방법은 있다.
바로 NULL값을 이용하는 것이다.
아래의 코드를 보자
int main(void)
{
int *pnum1 = 0;
int *pnum2 = NULL;
}
이 둘이 의미하는 바는 같다 왜 0과 NULL이 같은 의미를 지니는 이유는 0은 *아스키코드에서 NULL이기 때문이다.
그리고 0이 라는 숫자가 들어가면 *pnum1이 0번지를가리키진 않는다.
여기서 0(NULL)의 의미는해당 포인터 변수는 아무것도 가리키고 있지 않다고 할 수 있다.
*아스키코드
●배열의 포인터
배열도 자료형이기 때문에 당연히 배열을 위한 포인터 또한 존재한다.
예제를 통해 알아보도록 하자.
int a[10]; // int [10] 자료형 변수 a. 크기는 40 바이트
int (*p)[10] = &a; // int [10] 자료형의 포인터 변수 p. p의 자료형은 int (*)[10]
(*p)[3] = 3; // a[3] = 3 과 같다.
*p[3] = 3; // a[30] = 3 과 같다. 오버플로우
int *pa = a; // int 자료형의 포인터 변수 pa.
pa[3] = 3; // a[3] = 3과 같다.
변수 p는 변수 a의 주소를 담고 있다. 여기서 p의 크기는 포인터 변수이기 때문에 8바이트 이다.
p를 통해 a에 접근할 때는 *p 또는 p[0] 을 적어주면 됩니다. 이때의 자료형은 int [10] 이며, 크기는 40 바이트 이다.
*p 는 배열을 가리키기 때문에 배열 안에 원소로 접근할 수 있다. 이 경우는 (*p)[3]과 같은 방법으로 접근이 가능하다.
간혹 *p[3] 과 같이 접근하는 경우가 있는데, 이는 p[3][0]과 같기 때문에 위 코드에서는 오버플로우가 된다.
이는 * 연산자의 우선순위가 낮기 때문에 발생하는 문제이므로 사용에 주의하자.
그런데 C언어 강의 시간에는 배열을 저렇게 담지 않고, 변수 pa와 같이 단순히 int형 포인터를 통해 배열을 담았을 것이다.
사실 이 방법은 엄밀하게 말하면 배열의 주소를 포인터변수로 담은 것이 아니다. a[0]의 주소를 포인터로 담은 것이다.
이것은 배열의 성질에 의한것으로, a는 int [10] 자료형이지만 a + 0 은 int * 자료형이 된다.
마찬가지로 sizeof(a) 는 40 바이트이고, sizeof(a + 0) 은 8바이트가 된다.
변수 pa의 경우는 후자처럼 처리가 된 것이고, 이것을 강의시간에는 배열의 이름은 배열의 첫 번째 원소의 주소를 가리킨다고 배웠을 것이다.
다차원 배열의 경우도 위와 같은 방법으로 표시할 수 있다.
●포인터의 포인터
포인터 또한 자료형이기 때문에 마찬가지로 포인터를 위한 포인터도 정의할 수 있다.
예제를 통해 알아본다.
int a; // int형 변수 a. 크기는 4 바이트
int *pa = &a; // int * 자료형 pa. 크기는 8 바이트
int **ppa = &pa; // int ** 자료형 ppa. 크기는 8 바이트
int b[10]; // int [10] 자료형 b. 크기는 40 바이트
int (*pb)[10] = &b; // int (*)[10] 자료형 pb. 크기는 8 바이트
int (**ppb)[10] = &pb; int (**)[10] 자료형 ppb. 크기는 8 바이트
int *c[10]; // int *[10] 자료형 c. 크기는 80 바이트
int *(*pc)[10] = &c; // int *(*)[10] 자료형 pc. 크기는 8 바이트
배열의 경우와 크게 다르지 않다. 만약 변수 ppa를 통해 변수 a에 접근하려면 **ppa 또는 ppa[0][0] 과 같이 적어주면 된다.
변수 ppb는 int [10] 자료형을 가리키는 포인터 int (*)[10] 을 가리키는 포인터이다. 괄호와 *의 위치를 기억해야 한다.
변수 c는 int *의 10개 짜리 배열이다. 따라서 크기는 80 바이트가 된다. 변수 pc는 변수 c의 자료형을 가리킨다.
●포인터의 형변환
포인터는 메모리 주소를 담는 자료형이고, 메모리 주소를 어떤 자료형으로 접근한다고 해도 메모리 주소가 바뀌지는 않
  • 가격1,500
  • 페이지수9페이지
  • 등록일2019.05.15
  • 저작시기2018.10
  • 파일형식한글(hwp)
  • 자료번호#1098927
본 자료는 최근 2주간 다운받은 회원이 없습니다.
다운로드 장바구니