#include <stdio.h>

int main() {
  
  int list[3][4] = {10,20,30,40,50,60,70,80,90,100,110,120};

// list, list[0], *list는 시작 주소값은 같다.
// 하지만
// list + 1 = 다음 행으로 이동
// list[0] + 1 = 같은 행에서 다음 열로 이동
    
  printf("%p\n", list[0]);     //0번째 행의 시작 주소값
  printf("%p\n", list);        //0번째 행의 시작 주소값
  printf("%p\n", *(list));     //0번째 행의 시작 주소값
  printf("%p\n",  list + 1);   //한 행 전체, 즉 int 4개를 건너뜀->50
  printf("%p\n",  list[0] + 1);  //20

  printf("%d\n",  *(list[0] + 1));  //20 출력
  printf("%d\n",  **(list + 1));   //50 출력
    
  printf("%d\n", *(list[0]));  //list[0]가 첫 번째 원소의 주소이므로 *를 붙이면 그 주소의 값->10
  printf("%d\n", **(list));    //첫 번째 행인 list[0]->첫 번째 행의 첫 번째 값->10
  
  printf("\n");
  
  printf("%p\n", list[0]+3);    //첫 번째 행의 첫 번째 원소 주소->3칸이동한 주소값
  printf("%d\n", *(list[0]+3)); //0번째 행의 시작 주소값->2칸이동한 주소값->그안에 있는 실제값->40
  //!!주의!!완전히 다른 이동!! list는 한 행 전체를 단위로 이동
  //한 행에는 int가 4개 -> 행3개이동 -> 배열끝을 넘어 감-> 잘못된 코드임
  printf("%d\n", **(list+3));  //Undefined Behavior(정의되지 않은 동작)
  printf("%d\n", **(list+1));  //50
  printf("%d\n", **(list+2));  //90
   
  return 0;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: