[2025.03.28] 1차 배열과 포인터

2025. 3. 28. 23:21·C/본수업

지금까지 수업 시간에 배웠던 내용중 나한테 제일 어려운 부분을 지금 배우는중,,,,

포인터 이자식 굉장히 어렵군... 일단 내가 오늘 이해한 것을 보여주지! 1차 배열 포인터 !!!!!

 

포인터를 사용할 때 두 가지 연산자(?)가 사용됨.

1. & : 피연산자의 주소값

2. * : 그 주소가 가리키는 값

 

★ 간단한 예시

    int num = 7; // 정수형 변수 num 선언 및 7로 초기화
    
    int *pnum; // 포인터 변수 pnum, 앞에 int는 int형 변수의 주소를 저장한다는 말
    
    pnum = # // num의 주소값을 포인터 변수 pnum에 저장

    printf("num : %d\n", num);
    printf("num의 주소 : %p\n", &num);
    printf("pnum이 가리키는 값(*pnum) : %d\n", *pnum);
    printf("pnum : %p\n", pnum);

 

정수형 변수 num의 주소값과 pnum의 값이 같음.

포인터 변수 pnum이 가리키는 값 (= *pnum) 은 num의 값이기 때문에 7임. 

 

 

 

 

    int num1 = 100;
    
    int *pnum; // 포인터 변수 pnum 선언

    pnum = &num1; // 포인터 변수 pnum에 num1의 주소값 저장

    *pnum += 30; // 포인터 변수 pnum이 가리키는 값에 30을 더해라

    printf("num1 : %d\n", num1);

 

pnum이 가리키는 값(= *pnum = num1)에 30을 더함 => num1 = 100 + 30 = 130

 

 

 

    int num1 = 10;
    int num2 = 20;

    int *ptr1 = &num1; // 포인터 변수 ptr1에 num1의 주소값 저장
    int *ptr2 = &num2; // 포인터 변수 ptr2에 num2의 주소값 저장
    int *tmp;

    *ptr1 += 10; // ptr1이 가리키는 값에 10 더함
    *ptr2 -= 10; // ptr2가 가리키는 값에 10 뺌

    tmp = ptr1;
    ptr1 = ptr2;
    ptr2 = tmp;

    printf("ptr1 : %d\n", *ptr1);
    printf("ptr2 : %d\n", *ptr2);

 

 

 

ptr1이 가리키는 값(= *ptr1 = num1)에 10을 더함.

ptr2가 가리키는 값(= *ptr2 = num2)에 10을 뺌.

이렇게 포인터를 사용하여 두 개의 값을 바꾸는 것도 가능함.

 

 

 

★ 모든 배열 요소 값을 2씩 증가시키는 문제

    int arr[5] = {1, 2, 3, 4, 5};

    int *ptr = arr;

    for (int i = 0 ; i < 5 ; i++)
    {
        *(ptr+i) += 2;
        printf("%d ", arr[i]);
    }
    printf("\n");
    for (int i = 0 ; i < 5 ; i++)
    {
        printf("%d ", *(ptr+i));
    }

 

 

arr은 5개의 요소를 갖는 1차 배열임.

배열이름 자체의 주소(?)는 배열의 첫번째 요소의 주소값과 같음.

포인터 변수 ptr에 배열 arr의 주소 저장

ptr + 1 : ptr이 가리키는 주소는 arr의 첫번째 요소 주소임. + 1을 해주면 다음 요소의 주소가 됨.

우리는 (ptr+i)가 가리키는 값에 2씩 더해줘야하기 때문에 *을 붙여야 함.

===> *(ptr + i) += 2;

 

 

 

★ 배열에 저장된 정수의 합 구하기

    int arr[5] = {1, 2, 3, 4, 5};

    int *ptr = &arr[4];

    int sum = 0;

    for (int i = 0 ; i <5 ; i++)
    {
        sum += *(ptr - i);
    }
    printf("%d\n", sum);

 

 

포인터 변수 ptr에 배열 arr의 마지막 요소의 주소(&arr[4])를 저장함.

그러면 (ptr - i)는 배열 arr의 마지막 요소에서부터 0번째 요소까지의 주소가 됨.

우리는 (ptr - i)가 가리키는 값의 합을 구해야하기 때문에, *을 붙여야 함.

===> sum += *(ptr - i);

 

 

 

★ 배열 역순 구하기

    int arr[6] = {1, 2, 3, 4, 5, 6};

    int *ptr1 = &arr[0];
    int *ptr2 = &arr[5];

    int tmp;

    for (int i = 0 ; i < 3 ; i++)
    {
        tmp = *(ptr2 - i);
        *(ptr2 - i) = *(ptr1 + i);
        *(ptr1 + i) = tmp;
    }

    for (int j = 0; j < 6 ; j++)
    {
        printf("%d ", arr[j]);
    }

 

배열 arr의 처음 요소와 마지막 요소의 주소를 각각 포인터 변수 ptr1, ptr2에 저장함.

tmp를 사용하여 a, b의 값을 서로 바꾸는 것과 똑같이 코드를 작성함.

배열의 요소가 6개 이므로 3번 반복하여 (0번, 5번), (1번, 4번), (2번, 3번) 요소를 서로 바꿔줌.

 

 


 

 

 

이 문제들을 읽고 직접 코딩해보면서 1차 배열의 포인터에 대해서는 어느정도 이해하게 되었음. 2차 배열은 더 어렵겠지,,,,,? 그래도 1차 배열 이해했으니까 괜찮으려나,,,, 걱정걱정,,, 내일은 문자열을 가리키는 포인터에 대해 공부해보려고 함,,, 포인터 이자식 언넝 격파하자!!!!!!! 돌격!!!!!!!!!!!!!!!!

 

1차 배열 포인터 이해안되시는 분들,,, 제꺼 보고 이해가능 하시려나요 ㅠㅠㅠ 최대한 쉽게 설명해보려고 했는데 흠,,,,,,,,, 처음에는 &랑 *도 뭔지 헷갈리고, %d, %p도 뭘 써야될지 몰랐는데, 알고나니까 1차 배열은 이제 쪼~~~~~끔은 쉽게 다가온다!!!!!!!!!!!!!

 

주소인지 값인지에 따라서 & / * 잘 구분하기!!

 

 

'C > 본수업' 카테고리의 다른 글

[2025.04.01] 이중 포인터  (0) 2025.04.02
[2025.03.30] 1차, 2차 배열 함수 전달인자로 사용하기  (0) 2025.03.31
[2025.03.14] Ch.09_함수_자판기 만들기 함수화 (동영상 포함)  (0) 2025.03.14
[2025.03.14] Ch.08_문자 입출력과 입력 유효성 검사  (0) 2025.03.14
[2025.03.13] Ch.07_C의 제어몬: 분기와 점프_자판기 만들기  (0) 2025.03.13
'C/본수업' 카테고리의 다른 글
  • [2025.04.01] 이중 포인터
  • [2025.03.30] 1차, 2차 배열 함수 전달인자로 사용하기
  • [2025.03.14] Ch.09_함수_자판기 만들기 함수화 (동영상 포함)
  • [2025.03.14] Ch.08_문자 입출력과 입력 유효성 검사
polibo
polibo
Polibo의 개발 성장기 지켜봐주십슈 (콩 싫어해요.)
  • polibo
    Polibo와 개발 콩나무 키우기
    polibo
  • 전체
    오늘
    어제
    • 분류 전체보기 (65)
      • Python (23)
      • C (32)
        • 본수업 (19)
        • 예습 (7)
        • 개인프로젝트01 - 로또 (3)
        • 개인프로젝트02 - 복켓몬 키우기 (2)
        • 개인프로젝트03 - 김복천국 POS기 (1)
        • 팀프로젝트01 - 용사 복이의 대모험 RPG (0)
        • 팀프로젝트02 - 메일 프로그램 (0)
      • TCP_IP (0)
      • DB (1)
      • C++ (7)
        • 개인프로젝트01 - 숫자야구 (0)
      • QT (1)
        • 개인프로젝트01 - 숫자야구 (0)
        • 팀프로젝트01 - 키오스크 (1)
        • 팀프로젝트02 - 퐘퐘이 (0)
        • 팀프로젝트03 - 개발의 민족 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    if문
    문자열
    c우선순위
    Python
    파이썬 숫자야구
    파이썬조건문
    조건문
    C
    else if
    while문
    파이썬게임
    파이썬반복문
    c언어 scanf
    c언어
    순서도
    for문
    파이썬예제
    파이썬
    반복문
    코딩
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
polibo
[2025.03.28] 1차 배열과 포인터

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.