언어 자료구조 알고리즘/디딤돌 C언어

47. 포인터 + 정수

언제나휴일 2016. 1. 1. 12:20
반응형

 

 

C 언어에서 배열 이름은 관리하는 메모리의 시작 주소를 의미하죠.
 프로그램에서 배열 이름은 포인터 상수로 취급해요.
따라서 배열을 효과적으로 사용하려면 포인터 관련 연산자를 잘 사용할 수 있어야 겠죠.  
 
C 언어에서 + 연산에는 하나의 포인터 형식과 정수 형식을 피연산자가 오는 것을 허용해요.
이 때 연산 결과는 상대적 거리의 메모리 주소를 의미한답니다.
 
여기에서 말하는 상대적 거리는 예를 들어 알아볼게요.
int 형식 원소의 포인터 변수의 값이 1000일 때 상대적 거리 4 1000번지에서 int 형식 원소 4개 크기를 더한 주소예요.
int 형식의 메모리 크기가 4바이트이므로 1000번지에서 상대적 거리 4 1016이예요.
물론 여기서 1016은 정수 형식이 아니고 포인터 형식이랍니다.
 
◈ 포인터 변수와 정수 형식 사이의 + 연산
#include <stdio.h>
int main()
{
   int *p = (int *) 1000;
 
    printf("before : %d\n",p);
    p = p+4;
    printf("after : %d\n",p);
 
    return 0;
}
실행 결과
before : 1000
after : 1016
 
배열 이름도 관리하는 메모리 시작 주소를 의미해서 프로그램에서는 원소 형식이 같은 포인터 상수로 취급하죠.
따라서 배열 이름도 정수 형식과 + 연산이 가능하며 상대적 거리에 있는 원소의 메모리 주소가 연산 결과예요.
 
◈ 배열 이름과 정수 형식 사이의 + 연산
#include <stdio.h>
int main()
{
    int arr[10];
    printf("arr:%d\n",arr);
    printf("arr+4:%d\n",arr+4);
    return 0;
}
실행 결과
arr : 3013304 (실행 환경에 따라 결과는 다를 수 있음)
arr+4 : 3013320 (앞에 출력한 결과에 16을 더한 값임)

 

◈ 기본 연습
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. 포인터 + 정수

 

반응형

'언어 자료구조 알고리즘 > 디딤돌 C언어' 카테고리의 다른 글

52. 함수 개요  (0) 2016.01.01
51. 정리하기  (0) 2016.01.01
50. 인덱스 연산자  (0) 2016.01.01
49. 간접 연산자  (0) 2016.01.01
48. 포인터와 - 연산  (0) 2016.01.01
46. 배열 선언문  (0) 2016.01.01
45. 배열과 포인터 개요  (0) 2016.01.01
44. 정리하기  (0) 2016.01.01
43. 매크로 구문  (0) 2016.01.01
42. 제어문 연습 - 별출력  (0) 2016.01.01