[C언어] 배열과 포인터 예제

지환·2022년 1월 19일
0

C언어

목록 보기
26/37
post-thumbnail

배열과 포인터

  • 배열과 포인터에 대한 예제를 살펴보겠다.

다음 예제는 포인터를 사용해서 배열의 각 요소에 저장된 값을 합산하는 프로그램이다.

<예제1>

#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* 형 포인터 변수 3개를 표현하려면 어떻게 표현 할 것인가?
 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언어의 꽃이라고 불리는 포인터와 동적할당 필자는 기대된다.

profile
아는만큼보인다.

0개의 댓글