본문 바로가기

C언어

Chapter 2. 1차원 배열과 포인터

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