[chapter 09 포인터]
09-1 포인터의 기본 개념
int a;
4바이트 전체를 a라는 이름으로 사용
int형 변수a의 주소 : 2750392
=> 변수 a는 2750392~2750395번까지 4바이트에 할당
포인터는 변수의 메모리 주소를 저장하는 변수, 변수처럼 선언하고 사용
int *pa;
자료형 *변수명; // 주소 위치에 있는 변수의 자료형 사용
포인터(pa)가 어떤 변수(a)의 주소를 저장한 경우 '가리킨다'로 표현
pa -> a : 포인터pa로 변수a로 사용가능
포인터가 가리키는 변수를 사용 시 포인터 연산자(*) 사용
09-2 포인터 완전 정복을 위한 포인터 이해하기
주소와 포인터의 차이
-주소는 시작 주소 값 자체, 포인터는 값을 저장하는 또다른 메모리 공간 (포인터는 다른 주소를 대입해 그 값을 바꿀 수 있고, 주소는 상수이므로 대입연산자 왼쪽에 올 수 없음)
주소와 포인터의 크기
모든 주소와 포인터는 가리키는 자료형과 상관없이 그 크기가 같다는 것
(sizeof 연산자로 확인)
포인터의 대입 규칙
포인터는 가리키는 변수의 형태가 같을 때만 대입
// 오류 발생 코드 (변수 p와 pd는 자료형이 다르다)
#include <stdio.h>
int main(void)
{
int a = 10; // 고치기: double a = 10.0으로 고치면 실행 결과가 10.00000으로 나옴
int* p = &a;
double* pd;
pd = p;
printf("%lf\n", *pd);
return 0;
}
포인터를 사용하는 이유
메모리에 직접 접근하는 경우나 동적할당한 메모리를 사용하는 경우에는 포인터가 반드시 필요함
기본 숙제: 포인터의 핵심 내용을 정리하고 공유
=> 블로그 내용
추가 숙제: 도전 실전 예제