C언어_ch11_정리

728x90

ch11. 포인터

11.1 포인터

포인터 : 메모리 주소를 갖는 변수

주소연산자 : 해당 변수이름의 주소를 반환

 

[포인터의 선언]

-포인터: 변수의 주소를 가지는 변수

int *p;

 

11.2 간점참조연산자

-포인터를 통해 메모리를 다시 간접 참조

-포인터가 지칭하는 변수 주소 속의 값을 사용 간으

-포인터 이용하면 변수를 간접 참조 가능

cf. 직접 참조 : 변수의 이름으로 접근하여 변수 값 참조

간접 참조 : 포인터 이용하여 변수 값 참조

 -메모리 주소 byte단위

주소 : %u (부호없는 10진ㄴ수)

포인터 주소 :%p (16진수)

 

11.3 포인터 사용 주의점

[초기화하지 않고 사용 시]

-쓰레기값 가지게 됨

-컴파일 시 체크안됨

-NULL로 초기화해둘 것 !

[포인터 타입과 지칭하는 변수의 타입 반드시 일치]

 

11.4 포인터 연산

-덧셈과 뺄셈만 가능

-포인터가 가리키는 자료형의 크기만큼 덧셈, 뺄셈

 

[간점참조연산자와 증감연산자]

1) v = *p++ : *pv 대입 후 -> p++

2) v = (*p)++ : *pv 대입 후 -> (*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)포인터를 사용하여 접근 (포인터 이용하여 배열 요소 참조 가능하므로)

728x90

'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