ch11. 포인터
11.1 포인터
포인터 : 메모리 주소를 갖는 변수
주소연산자 : 해당 변수이름의 주소를 반환
[포인터의 선언]
-포인터: 변수의 주소를 가지는 변수
int *p;
11.2 간점참조연산자
-포인터를 통해 메모리를 다시 간접 참조
-포인터가 지칭하는 변수 주소 속의 값을 사용 간으
-포인터 이용하면 변수를 간접 참조 가능
cf. 직접 참조 : 변수의 이름으로 접근하여 변수 값 참조
간접 참조 : 포인터 이용하여 변수 값 참조
-메모리 주소 byte단위
주소 : %u (부호없는 10진ㄴ수)
포인터 주소 :%p (16진수)
11.3 포인터 사용 주의점
[초기화하지 않고 사용 시]
-쓰레기값 가지게 됨
-컴파일 시 체크안됨
-NULL로 초기화해둘 것 !
[포인터 타입과 지칭하는 변수의 타입 반드시 일치]
11.4 포인터 연산
-덧셈과 뺄셈만 가능
-포인터가 가리키는 자료형의 크기만큼 덧셈, 뺄셈
[간점참조연산자와 증감연산자]
1) v = *p++ : *p값 v 대입 후 -> p++
2) v = (*p)++ : *p값 v 대입 후 -> (*p)값 ++
3) v = *++p : (++p)가 가리키는 값을 v에 대입
4) v = ++*p : *p 값 증가 시킨 뒤 v 대입
[포인터 형변환]
-명시적으로 포인터 타입 변환 가능
11.5 포인터와 함수
-값에 의한 호출 : 인수의 값 (복사본)을 전달
-참조에 의한 호출 : 포인터 사용 해당 인수의 원본 (주소)를 전달
swap() 사용 시,
인수가 값으로 전달되면 아무리 swap 일어나도 원본 변수는 변화X
인수가 주소로 전달되면 swap() 으로 원본 변수 변화시킴
scanf( “ %d” , & a) ;
-전형적인 참조에 의한 호출 사용
[반환값으로 포인터]
-다만 지역변수의 주소 반환 X
11.6 포인터와 배열
-배열명 : 해당 배열 첫 요소 주소값
-배열명은 포인터와도 같은 개념
-배열명은 포인터 상수이므로 변경 불가능
[포인터를 배열처럼 사용]
-배열명을 가리키는 포인터 변수로 직접 각 배열 요소 접근 가능
a[]
*p = a;
p[1] = a[1]; 동일한 값 가리킴
[배열 매개변수]
-배열명을 인수로 함수 호출 시, 자동으로 배열의 주소가 전달됨
-함수는 배열을 포인터로 받을 수 있다.
void 함수(int b[], int size) void 함수(int *b, int size)
-각 배열 요소에 접근 방법
1)배열의 인덱스로 접근
2)포인터를 사용하여 접근 (포인터 이용하여 배열 요소 참조 가능하므로)
'C++, C언어 > [문법]_C언어' 카테고리의 다른 글
C언어_ch10_정리 (0) | 2021.12.20 |
---|---|
C응용_ch09_정리 (0) | 2021.12.20 |
혼.공.C언어_프로그램예제_전체코드정리 (0) | 2021.07.27 |
혼.공.C언어_전범위_정리 (0) | 2021.07.27 |
나도코딩_C언어_전범위정리 (0) | 2021.07.27 |