본문 바로가기
KNOU/요약정리

[C 프로그래밍] 배열과포인터

by bottlesun 2023. 5. 10.
728x90

배열의 정의

동일한 자료형을 갖는 자료의 리스트

각 요소는 하나의 변수로 취급 배열 명과 첨자로 구분 Ex) array[0] array[1]

배열의 선언형태

첨자의 개수는 배열 전체의 구성요소의 개수 의미

  • 1차원 배열
  • 2차원 배열
  • 3차원 배열

char 형 배열 (문자열 배열)

배열의 형이 문자열인 배열

배열명[문자열 길이 + 1] 의 개수를 가진다.

*** 포인터(Pointer)**

변수의 일종이다.

특정 데이터가 저장된 기억장소의 주소 값을 가지고 있다.

일반적인 변수의 기억공간 표현

  • 변수선언에 의해 기억공간이 할당
  • 할당된 기억공간에 변수에 대입된 데이터가 저장
  • 할당된 기억공간은 주소가 부여된다.

포인터의 개념

주소를 이용하여 변수와 같은 동일한 작업이 가능

포인터 변수 - 포인터 값을 다루는 변수 ( 변수의 주소값을 가질 수 있다.)

#include <stdio.h>

int main() {
    int num = 5;
    int* ptr = &num; // ptr 변수는 num 변수의 메모리 주소를 가리킵니다.

    printf("num 변수의 값: %d\\n", num);
    printf("num 변수의 메모리 주소: %p\\n", &num);
    printf("ptr 변수의 값: %p\\n", ptr);
    printf("ptr 변수가 가리키는 값: %d\\n", *ptr);

    *ptr = 10; // 포인터를 통해 num 변수의 값을 변경합니다.

    printf("ptr 변수를 통해 값을 업데이트한 후의 num 변수의 값: %d\\n", num);

    return 0;
}

char 포인터

문자열 처리 포인터

char *cp = "compouter"; // 초기화

이중포인터 (다중 리스트 이상에서 주로 사용)

자료가 있는곳을 이중으로 가리키는 포인터

자료가 아닌 주소 값이 들어가 있고 그 주소에 자료가 들어가 있다.

int **p; //이중 포인터 선언

p : 기억공간 주소

*p : 주소 p에 수록 되어 있는 값. 이 값이 주소로 사용 됨.

**p : 주소가 *p인 곳에 수록되어 있는 값. 즉 int형의 자료

#include <stdio.h>

void get_values(int** ptr) {
    **ptr = 10;
    *(*ptr + 1) = 20;
}

int main() {
    int num1 = 5, num2 = 15;
    int *ptr1 = &num1, *ptr2 = &num2;

    int **ptr_ptr = &ptr1; // 이중 포인터 ptr_ptr은 포인터 ptr1의 주소를 가리킵니다.

    printf("Before calling function:\\n");
    printf("num1: %d, num2: %d\\n", num1, num2);

    get_values(ptr_ptr);

    printf("After calling function:\\n");
    printf("num1: %d, num2: %d\\n", num1, num2);

    return 0;
}
728x90

댓글