Chapter 2. 1차원 배열과 포인터
배열명은 주소를 뜻한다.
배열명은 배열의 첫번째 배열 요소의 주소를 뜻한다.
2_7.c
#include <stdio.h>
main()
{
int imsi[3] = {5,3,7};
int *imsip;
imsip = imsi;
printf("%#010x %#010x %#010x\n", imsi, &imsi[0], imsip);
printf("*imsip : %d\n",*imsip);
}
gcc -o 2_7 2_7.c
./2_7
0xbf927bf4 0xbf927bf4 0xbf927bf4
*imsip : 5
포인터+ 정수의의미
주소에 정수 값을 더하는 것이 허용된다는 사실에 주목.
imsip +1은imsip가가리키는배열 요소 바로 다음 배열 요소를 가리킨다.
imsip에 정수 값을 더할 때 정수 값 만큼의 바이트가더해지는 것이 아니라 포인터 변수의 타입 크기만큼 증가한다.
2_9.c
#include <stdio.h>
main()
{
int imsi[3] = {5, 3, 7};
int *imsip;
imsip = imsi;
printf("%d %d %d\n",
*(imsip+0),<--'+'보다'*'가우선순위가 높기 때문에 반드시괄호를 해야함
*(imsip+1),
*(imsip+2));
}
gcc -o 2_9 2_9.c
./2_9
5 3 7
배열명의 숨은 의미
imsi + 1은 imsip가 가리키는 배열의 다음 배열 요소를 지칭한다.
*imsi++는 잘못된 수식이다.
imsip는 포인터 변수이기 때문에imsip 안에 주소를 저장할 수 있다.
하지만, imsi라는 것은 배열명으로써imsi[0]이 저장된 곳의 주소를뜻하고 있을 뿐 변수가 아니기 때문에주소를 저장할 수없다. ( 할당 불가능)
'C언어' 카테고리의 다른 글
Chapter 5. 포인터의 포인터 (0) | 2011.10.16 |
---|---|
Chapter 6. scanf()와 fgets() (0) | 2011.10.16 |
Chapter 3. 2차원 배열과 포인터 (0) | 2011.10.16 |
실행결과 (0) | 2011.10.16 |
문자열관련 예제 (0) | 2011.10.16 |