[이중포인터]

[코드]
#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 |