c언어

[C언어] 포인터 기본

kidmillionaire1998 2022. 9. 6. 10:26

숭실대학교 김익수 교수님의 2022-2학기 프로그래밍 응용 및 실습 강의를 정리 및 재구성했다.

[변수 주소 preview] 

int i; 
printf("%p",&i);​
int i; 			  // i를 메모리에 할당 
printf("%p", &i); //%p는 변수의 주소를 출력// i가 400번지에 저장되어있다고 가정하면, 400이 출력됨

 

[포인터 & 포인터 변수] 

- 포인터

: 주소를 다루기 위한 자료형이다. 

 -데이터를 가진 메모리 공간을 주소로 접근하기 위해 사용한다. 

 

- 포인터 변수

:값으로 메모리 주소를 갖는 변수이다. 

 

[포인터 변수 선언 방법] 

int *p; // int 형 포인터 변수 p 선언 
int *a,b; // int 형 포인터 변수 a와 int 형 변수 b 선언// b는 int 형 포인터가 아닌 int 형 변수
int *a,*b // int 형 포인터 변수 a와 b선언

[주소 연산자] 

: 메모리에 할당된 변수의 주소값을 알려주는 연산자이다. 

int i; 				//i를 메모리에 할당// 주소 400번지에 저장했다고 가정
printf("%p", &i);	//0x190 출력(400을 %p로 주소형태로 출력)

-상수나 수식 앞에는 주소연산자를 사용할 수 없다. 

// 잘못 사용한 예 
&3;		//상수 앞에서 사용 
&(i+3);	//수식 앞에서 사용 

//올바르게 사용한 예 
&i+3; // i의 주소 값에 3을 더한 값이다.

-포인터 변수 사용 

int i = 100, *p; 
p = &i;			//변수 i의 메모리 주소를 p에 할당

-사용 예제 (종합) 

int i, *p; 
register int v; 

p=0; 			//p = NULL; 과 의미가 같다. // 원래 주소값 앞에 주소연산자 &가 있어야 하는데, 이 경우는 예외이다.
p=&i; 			 
p=3000; 		//컴파일 시 경고, 상수에 사용했기 때문에 잘못된 사용방법이다.
p=(int*)1776; 	// int형 상수를 (int*)로 캐스트(형변환), p의 주소는 1776번지이다. 
p=&(i+99); 		//컴파일 시 에러, 수식에 사용했기 때문에 잘못된 사용방법이다. 
p=&v; 			// 오류, register 변수에 사용// register 변수는 주소 값을 갖지 않는다.

 

'c언어' 카테고리의 다른 글

[C언어] 비트 수준 접근  (0) 2022.10.23
[C언어] 공용체(union) / 열거형  (0) 2022.10.12
[C언어] 동적 메모리 할당  (0) 2022.09.07
[C언어] 포인터와 배열  (0) 2022.09.07
[C언어]포인터와 함수  (0) 2022.09.07