*포인터

 

- 메모리 주소를 이용하여 원하는 저장 공간에 접근하는 것을 얘기한다.

 

- 주소를 가지고있는 변수

 

 

 

#포인터 변수

 

- 주소값

  변수의 주소를 계산하는 연산자 : &

 

- 가리키는 대상의 정보가 포인터 안에 있어야함.

 

 

 

 

 

 

 

 

 

#포인터 변수를 사용하는 이유

 

- 함수가 리턴해야 할 값이 2개 이상인 경우 사용한다.

 

- 함수에서 배열을 매개 변수로 받아들일 때

 

- 프로그램에서 동적할당을 진행할 때 (자료구조)

 

- 이름을 모르는 변수를 이용해야 될 경우

   (외부 프로그램 및 외부 메모리에 직접 접근이 가능하다.)

 

- 메모리를 효율적으로 사용할 수 있다.

 Ex) int arr[100];

 

 

 

#포인터 변수의 크기

 

- 16bit 시스템 -> 주소값의 크기 -> 2byte

- 32bit 시스템 -> 주고값의 크기 -> 4byte

 

- 메모리의 주소는 고정적으로 정해져있다.

 

- 메모리의 주소는 음수 x

 

- %d -> +,-

- %u -> 부호없이 양수만 출력

- %p -> 16진수의 주소값

 

0~42억 -> 4byte

 

 

 

#포인터 선언

 

정보↓

     int* 포인터 변수명 = 가리키는 대상의 주소값 

 

 

 

 

 

 

 

 

 

#포인터 변수의 연결

 

 

 

 

 

 

 

#다양한 포인터 선언

 

 

 

 

 

 

 

 

#간접 참조 연산자 ( * )

 

- 포인터가 가리키는 값을 가져오는 연산자

 

- 지정된 위치에서 포인터의 타입에 따라 값을 읽어들인다.

 

- &연산자는 변수의 주소를 구하여 포인터에 대입할 때 사용 , *연산자는 포인터를 통하여 변수를 간접 참조할 때 사용

 

 

 

 

 

 

 

 

 

 

#포인터 예제

 

 

 

 

 

 

 

 

 

 

#포인터와 scanf()를 이용하여 정수 1개를 입력 받고 값이

  짝수인 경우 "짝수" 홀수면 "홀수" 출력하는 프로그램을 작성해보자

 

 

 

 

 

 

 

 

 

 

 

 

#포인터 사용시 주의점

 

 

 

 

 

 

 

 

 

 

 

#포인터 연산

 

- 가능한 연산 : 증가 , 감소 , 덧셈 , 뺄셈 연산

 

- 증가 연산의 경우 증가되는 값은 포인터가 가리키는 자료형의 크기만큼 증가

 

 

 

 

 

 

#증가 연산 예제

 

 

 

 

 

 

 

 

 

 

 

 

#간접 참조 연산자와 증감 연산자

 

 

- *p++;  = p가 가리키는 위치에서 값을 가져온 후에 p를 증가한다.

 

- (*p)++; = p가 가리키는 위치의 값을 증가한다.

 

 

 

 

 

 

 

#포인터 배열

 

- 배열과 포인터는 아주 밀접한 관계를 가지고있다.

 

- 배열 이름 = 포인터

 

- 포인터는 배열처럼 사용이 가능하다.

 

- int arr[3]; 

 

- arr -> &arr[0]주소값을 가리킨다.

 

 

#int형 변수 정보

 

- 배열을 구성하는 원소 한개의 접근하는 형식이다.

 

- 배열 전체의 시작주소만 저장한다.

 

- 배열의 이름 자체는 바꿀 수 없는 상수이며 곧 주소값을 의미하게 된다.

 

scanf("%s",name)

char name[30];

name -> name[0] - 주소값을 가리키고 문자를 저장하라 라는 정보를 가지고있다.

 

- 배열은 포인터이기 때문에 메모리에 접근하는 간접 참조 연산자( * )를 사용할 수 있다. 

 

 

 

 

#포인터 배열 주소값 비교

 

 

 

 

 

 

 

 

 

#2차원 배열에 문자열 저장

 

 

 

 

 

 

 

 

 

#문자형 포인터 배열

 

 

 

 

 

 

 

 

 

#배열3개를 선언하고 배열에 있는 값을 10진수와 주소값으로 출력

 

사용형식

 

- 정수 주소값 3개를 저장하는 배열

 

- int* arr[3];

 

 

 

 

 

 

 

 

 

#C에서의 인수 전달 방법

 

- 값에 의한 호출(call by value) : 기본적인 방법 , 함수 호출시에 변수의 값을 함수에 전달

 

- 참조에 의한 호출(call by reference) : 포인터 이용 , 함수 호출시에 변수의 주소를 함수의 매개변수로 전달

 

 

 

 

#swap() 함수

 

- 변수 2개의 값을 바꾸는 작업을 함수로 작성

 

 

 

 

 

 

 

 

#포인터를 이용한 swap() 함수

 

 

 

 

 

 

 

#scanf() 함수

 

- 변수에 값을 저장하기 위하여 변수의 주소를 받는다.

 

 

 

 

 

 

 

 

#포인터 사용의 장점

 

- 연결 리스트나 이진 트리 등의 향상된 자료 구조를 만들 수 있다.

 

- 참조에 의한 호출 : 포인터를 매개 변수로 이용하여 함수 외부의 변수의 값을 변경할 수 있다.

 

- 동적 메모리를 할당한다.

 

 

 

 

#const 포인터

 

- const를 붙이는 위치에 따라서 의미가 달라진다.

 

 

 

 

 

 

 

 

 

 

+ Recent posts