포인터 (2) 배열

Study/C 2014. 8. 27. 10:36

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
int main()
{
    int num[5]={1,2,3,4,5} , * pnum1 ;
    pnum1=num;
    printf("%p\n", pnum1);
    printf("%d\n",*pnum1);
    printf("pnum1+1: %d\n",*(pnum1+1));
    printf("pnum1+2: %d\n",*(pnum1+2));
    printf("pnum1+3: %d\n",*(pnum1+3));
    printf("pnum1+4: %d\n",*(pnum1+4));
 
    printf("pnum1 Add\n");
    printf("pnum1+1: %p\n",(pnum1));
    printf("pnum1+2: %p\n",(pnum1+1));
    printf("pnum1+3: %p\n",(pnum1+2));
    printf("pnum1+4: %p\n",(pnum1+3));
    printf("pnum1+5: %p\n",(pnum1+4));
 
    printf("\nnum value\n");
    printf("num[0]:  %d\n",num[0]);
    printf("num[1]:  %d\n",num[1]);
    printf("num[2]:  %d\n",num[2]);
    printf("num[3]:  %d\n",num[3]);
    printf("num[4]:  %d\n",num[4]);
 
    printf("\nnum Add\n");
    printf("num[0]:  %p\n",&num[0]);
    printf("num[1]:  %p\n",&num[1]);
    printf("num[2]:  %p\n",&num[2]);
    printf("num[3]:  %p\n",&num[3]);
    printf("num[4]:  %p\n",&num[4]);
    return 0;
}




pnum1=num;

이렇게 포인터변수에 배열변수의 첫번째 주소값을 넣을수있으며 다른방식도있다

pnum1=&(num[0]);


같은 결과가 나타난다.


Tip


    printf("num[0]:  %p\n",&num);          //num[0]과 같다 (주소값이 같으므로)

    printf("num[1]:  %p\n",&num+1);       //num[1]과 같다 (주소값이 같으므로)

    printf("num[2]:  %p\n",&num+2);       //num[2]와 같다 (주소값이 같으므로)

    printf("num[3]:  %p\n",&num+3);       //num[3]과 같다 (주소값이 같으므로)

    printf("num[4]:  %p\n",&num+4);       //num[4]와 같다 (주소값이 같으므로)


위와 같이 표현할수 있다.





int num[]={1,2,3,4,5};

int *p;

p=num;    //p=&num[0];

// p+1; p가 int형이기 때문에 메모리주소의 1의 증가가 

// 아니라 다음번지수를 가르킬수있도록 4가 증가

*(p+0)==num[0]

*(p+1)==num[1]

*(p+2)==num[2]

*(p+n)==num[n]            과 같다..


이것은 

*(num+n)==num[n]

*(p+n)==p[n]                이렇게 표현이 가능하다.

'Study > C' 카테고리의 다른 글

2차원 배열 (데이터 입력하기)  (0) 2014.08.27
포인터 (3) call by reference  (0) 2014.08.27
포인터 (1)  (0) 2014.08.27
함수 리턴값  (0) 2014.08.26
조건식  (0) 2014.08.26
Posted by 차희빈

차희빈

달력