숭실대학교 김익수 교수님의 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 |