배열과 포인터
다음 예제는 포인터를 사용해서 배열의 각 요소에 저장된 값을 합산하는 프로그램이다.
#include <stdio.h>
int main()
{
char data[5] = { 1,2,3,4,5 };
int temp = 0, i;
char* d = data; // &data 값과 같다. data 시작 주소를 *d가 가르키고 있다.
for (i = 0; i < 5; i++)
{
temp = temp + *d; // *d가 가르키는 곳에 가서 (data) 값을 누적해서 더해나간다.
d++; // i가 돌수록 p++ 처리된다.
}
printf("data 배열의 모든 합은 %d입니다.", temp);
}
포인터와 배열 추가개념
int *p1 . int *p2, int* P3
int *p[3]; 으로 선언 가능하다.
char *p[5];라고 선언한 것은 char *(p[5]);라고 선언한 것과 같다.
1. 우선 순위로 인해 p[5]먼저 실행 -> char *형 포인터로 정한다.
ㅁㅁㅁㅁㅁ(일반 배열) // ㅁㅁㅁㅁㅁ(포인터배열)
<--
그렇다면 char (*p)[5];는 무엇이 더 우선순위일까?
괄호가 묶여 있는 포인터가 우선 순위다. 괄호 속에 있는 *P가 먼저 처리된다.
즉. ㅁ(포인터) -> ㅁㅁㅁㅁㅁ(배열) //char (*p)작업
포인터 작업을 끝나면 char[5]만 남는다.
여기서 대상을 한 번 더 지목해야된다. (char[5]만 남기 때문에)
만약에 p가 가르키는 대상의 5바이트 중 4번쨰 항목에 9를 넣고 싶다면 이와 같이 해야된다.
ㅁ(*p)------>ㅁㅁㅁ9ㅁ (*p)[3]
다음은 동적할당에 대해서 알아보겠다. C언어의 꽃이라고 불리는 포인터와 동적할당 필자는 기대된다.