[2025.04.01] 이중 포인터

2025. 4. 2. 23:57·C/본수업

 

[이중포인터]

 

 

 

[코드]

#include <stdio.h>
#include <stdlib.h>
#define SIZE 100


int main()
{
    // 김밥
    char kimbab_list[8][SIZE] =  {"김      밥", "치즈  김밥", "참  치  김  밥", "김  치    김  밥", "야 채  김 밥", "소고기김밥", "돈까스  김밥", "삼겹살김밥"};
    int kimbab_price[8] = {3000, 3500, 3500, 3500, 3000, 4000, 4000, 4500};

    //라면
    char ramen_list[7][SIZE] = {"라      면", "계란  라면", "치  즈  라  면", "만  두    라  면", "짬 뽕  라 면", "떡  라  면", "떡만두  라면"};
    int  ramen_price[7] =  {3000, 3500, 3500, 3500, 4000, 3500, 4000};

    //덮밥
    char ricebowl_list[9][SIZE] = {"제육  덮밥", "오징어덮밥", "오징어제육덮밥", "돈 까 스   덮 밥", "쇠고기  덮밥", "김치  덮밥", "김치제육덮밥", "소세지덮밥", "오므라이스"};
    int ricebowl_price[9] =  {7000, 7500, 8000, 8000, 8000, 7000, 7500, 7500, 7500};

    //찌개
    char stew_list[8][SIZE] = {"김치  찌개", "된장  찌개", "참치 김치 찌개", "고기듬뿍김치찌개", "차돌된장찌개", "부대  찌개", "동 태  찌 개", "순두부찌개"};
    int stew_price[8] =  {7000, 7000, 7500, 8000, 8000, 8000, 8000, 8000};

    //떡볶이
    char tteokbokki_list[6][SIZE] = {"떡  볶  이", "치즈떡볶이", "해 물 떡 볶 이", "짜 장   떡 볶 이", "라   볶   이", "치즈라볶이"};
    int tteokbokki_price[6] =  {5000, 6000, 7000, 7000, 6000, 7000};

    //튀김
    char fried_list[5][SIZE]   = {"김말이튀김", "야채  튀김", "만  두  튀  김", "고  추    튀  김", "오징어  튀김"};
    int fried_price[5]   = {4000, 4000, 4000, 5000, 5000};

    //기타
    char bab_list[1][SIZE] = {"공  깃  밥"};
    int bab_price[1] = {1500};

    //음료
    char drink_list[4][SIZE] = {"콜      라", "사  이  다", "오 렌 지 환 타", "파인애플    환타"};
    int drink_price[4]= {1000, 1000 , 1000, 1000};

    char *ptr_menu[] = {kimbab_list, ramen_list, ricebowl_list, stew_list, tteokbokki_list, fried_list, bab_list, drink_list};

    int *ptr_price[] = {kimbab_price, ramen_price, ricebowl_price, stew_price, tteokbokki_price, fried_price, bab_price, drink_price};

    printf("치즈라면 가격 : %d\n", *(*(ptr_price + 1) + 2));
    printf("라볶이 가격 : %d\n", *(*(ptr_price + 4) + 4));

    // ptr_price : 김밥 가격 배열의 주소의 주소
    // ptr_price + 1 : 라면 가격 배열의 주소의 주소
    // *(ptr_price + 1) : 라면 가격 배열의 주소의 주소의 값 = 라면 가격 배열의 주소
    // *(ptr_price + 1) + 2 : 치즈 라면 가격의 주소
    // *(*(ptr_price + 1) + 2) : 치즈 라면 가격의 주소의 값 = 치즈 라면 가격


    // ptr_price : 김밥 가격 배열의 주소의 주소
    // ptr_price + 4 : 떡볶이 가격 배열의 주소의 주소
    // *(ptr_price + 4) : 떡볶이 가격 배열의 주소의 주소의 값 = 떡볶이 가격 배열의 주소 = 떡볶이 가격의 주소
    // *(ptr_price + 4) + 4 : 라볶이 가격의 주소
    // *(*(ptr_price + 4) + 4) : 라볶이 가격의 주소의 값 = 라볶이 가격

    //////////////////////////////////////////////////////////////////
    // 이 부분이 이해가 안가유,,,,,
    printf("%s\n", *ptr_menu);
    printf("%s\n", *(ptr_menu + 1));
    printf("%s\n", *(*(ptr_menu + 1) + 1));



    return 0;
}
 

 

 

[출력결과]

printf("%s\n", *ptr_menu);

printf("%s\n", *(ptr_menu + 1));

printf("%s\n", *(*(ptr_menu + 1) + 1)); // 이거는 error

 

첫번째, 두번째가 왜 프린트 했을 때 값이 저렇게 나오는지 이해가 안감.

*ptr_menu : 김밥 배열의 주소

*(ptr_menu + 1) : 라면 배열의 주소

*(*(ptr_menu + 1) + 1)) : 치즈 라면

 

이렇게 생각했는데, 결과는 위처럼 나옴,,, 이해를 시켜주라요 

 


 

완전 포신이 되고싶었는데, 문자열 이중포인터 사용하는 과정에서 헷갈리기 시작했다. 제일 위에 아이패드에 쓴 거는 완전 이해를 했는데, 코딩에 적용해서 하니까 값이 원하는대로 뽑히지 않았다.....

문자열 당신은 왜이렇게 나를 어렵게 하나요~~~ 근데 재밌어요 꺅

내가 생각했을 땐, 이렇게 쓰면 이 값이 나와야 하는데, 이게 왜 되는거지? 라는 생각만 왕창 들었다 ㅋㅋㅋ

1차 배열은 이해한대로 잘됐는데, 문자열 배열 (2차 배열) 가지고 이해하려고 하니까 뭔가 잘 안된다 ㅠㅠ

내일 다시 완벽 이해 도전합니다!!!!

 

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

[2025.03.30] 1차, 2차 배열 함수 전달인자로 사용하기  (0) 2025.03.31
[2025.03.28] 1차 배열과 포인터  (0) 2025.03.28
[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.03.30] 1차, 2차 배열 함수 전달인자로 사용하기
  • [2025.03.28] 1차 배열과 포인터
  • [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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
polibo
[2025.04.01] 이중 포인터
상단으로

티스토리툴바