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 |