배열과 포인터

문성원·2024년 1월 4일
0

1) 목표

  • 배열의 문제점에 대해서 살펴보고 이를 해결하는 포인터 문법 사용해보기
  • 포인터의 효율성에 대해서 직접 실습해보고 이해하기

2) 소스코드

// Visual Studio 2022, x86(32비트) 기준
// Array_and_Pointer
// 배열과 포인터의 관계에 대해서 좀 더 깊이 알아보기

#include "pch.h"
#include <stdio.h>      // printf 함수를 사용하기 위해
#define  MAX_COUNT 6    // 배열에 들어갈 원소 개수

// 여기서 char a_data[]는 배열이 아니라 포인터임
// 배열은 자기 자신을 더할 수 없음(주소를 바꿀 수 없으니까)
// char a_data[] => char *ap_data 이렇게도 표현할 수 있음
void ShowResult(char a_data[])
{
    int sum = 0, times = 1, max = -128, min = 127;
    // 포인터를 먼저 선언해 보자면
    // char 자료형 배열의 포인터 변수 선언(배열은 컴파일에서 자체적으로 메모리 공간을 할당하기에 주소의 개념을 가짐)
    char* p = a_data;
    // 배열의 마지막 주소 + 1 만큼 반복문을 돌릴 수 있도록 조건식을 세울 변수 설정
    char* p_limit = p + MAX_COUNT;

    while (p < p_limit)
    {
        sum += *p;
        times *= *p;
        if (max < *p)
            max = *p;
        if (min > *p)
            min = *p;
        ++p;
    }
    printf("합계: %d\n곱값: %d\n최댓값: %d\n최솟값: %d\n", sum, times, max, min);
}

int main()
{
    char data[MAX_COUNT] = { 6,3,8,4,1,5 };
    // 배열에 들어 있는 합계, 곱한 값, 최댓값을 구해보자
    ShowResult(data);
    // 프로그램 종료
    return 0;
}

3) 이해한 내용 정리

  • 배열은 Index_Addressing 방식을 통해 컴파일러를 통해 할당된 메모리 위치를 반복문을 통해 순회하면서 값을 출력하기에 똑같은 연산을 반복적으로 수행하는 경우가 많음
  • 메모리의 사용을 효율적으로 관리하고 컴파일 속도를 향상 시키기 위해서는 배열에 대한 포인터 변수를 선언하고 반복문에서 실행하고자 하는 문장을 돌려야 한다.

4) 출처

본 게시글은 금배씨 영상 중 "배열과 포인터" 를 참조하여 작성되었습니다.

profile
EasyWin32를 통해 C언어를 공부하고 있습니다~

0개의 댓글

관련 채용 정보