*포인터
- 메모리 주소를 이용하여 원하는 저장 공간에 접근하는 것을 얘기한다.
- 주소를 가지고있는 변수
#포인터 변수
- 주소값
변수의 주소를 계산하는 연산자 : &
- 가리키는 대상의 정보가 포인터 안에 있어야함.
#포인터 변수를 사용하는 이유
- 함수가 리턴해야 할 값이 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를 붙이는 위치에 따라서 의미가 달라진다.
'C언어 > C언어' 카테고리의 다른 글
C언어 [동적할당,동적메모리] (0) | 2017.11.10 |
---|---|
C언어 [구조체,구조체 배열,구조체 함수,구조체 포인터] (1) | 2017.11.08 |
C언어 [(라이브러리,난수 함수),(지역,전역변수),문자열] (0) | 2017.10.30 |
C언어 [배열,함수] (0) | 2017.10.28 |
C언어 [반복문 while , do~while , for] (0) | 2017.10.24 |