47. 포인터 + 정수

A) 배열 이름은 포인터 상수 취급해! 그리고 포인터와 정수 사이에 더하기 연산은 상대적 거리로 계산한단다. B) 그럼 int arr[10]; 처럼 선언하고 arr이 1000이면 1000+1이 1004가 되겠네요.

C 언어에서 배열 이름은 관리하는 메모리의 시작 주소를 의미하죠.
프로그램에서 배열 이름은 포인터 상수로 취급해요.
따라서 배열을 효과적으로 사용하려면 포인터 관련 연산자를 잘 사용할 수 있어야 겠죠.

C 언어에서 + 연산에는 하나의 포인터 형식과 정수 형식을 피연산자가 오는 것을 허용해요.
이 때 연산 결과는 상대적 거리의 메모리 주소를 의미한답니다.

여기에서 말하는 상대적 거리는 예를 들어 알아볼게요.
int 형식 원소의 포인터 변수의 값이 1000일 때 상대적 거리 4는 1000번지에서 int 형식 원소 4개 크기를 더한 주소예요.
즉 int 형식의 메모리 크기가 4바이트이므로 1000번지에서 상대적 거리 4는 1016이예요.
물론 여기서 1016은 정수 형식이 아니고 포인터 형식이랍니다.

◈ 포인터 변수와 정수 형식 사이의 + 연산

◈ 실행 결과

 

배열 이름도 관리하는 메모리 시작 주소를 의미해서 프로그램에서는 원소 형식이 같은 포인터 상수로 취급하죠.
따라서 배열 이름도 정수 형식과 + 연산이 가능하며 상대적 거리에 있는 원소의 메모리 주소가 연산 결과예요.

◈ 배열 이름과 정수 형식 사이의 + 연산

◈ 실행 결과

 

int arr[10]; 배열 이름은 할당한 메모리 주소를 의미! arr이 3013304번지일 때 arr+4라는 표현은 arr에서 상대적 거리 4인 메모리 주소를 의미하므로 3013320번지.

 

◈ 기본 연습
1. char 형식을 원소로 하는 포인터 변수 p를 선언하고 1000으로 초기화하세요.
그리고 p에 4를 더한 후에 p가 얼마인지 출력하세요.

2. short 형식을 원소로 하는 포인터 변수 p를 선언하고 1000으로 초기화하세요.
그리고 p에 4를 더한 후에 p가 얼마인지 출력하세요.

3. int 형식을 원소로 하며 원소 개수가 10인 배열 arr을 선언하세요.
int 형식을 원소로 하는 포인터 변수 p를 선언하고 arr+5로 초기화하세요.
arr과 p의 값을 출력하세요.


동영상 강의

[C언어 무료 동영상 강의] 47. 포인터+정수 48. 포인터와 -연산