게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
동적으로 할당된 메모리는 sizeof로 구할수 없나요??
게시물ID : programmer_12034짧은주소 복사하기
작성자 : 우와우와우왕
추천 : 0
조회수 : 9566회
댓글수 : 14개
등록시간 : 2015/07/11 13:56:17
옵션
  • 본인삭제금지
Code Snippet
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.     char *ar[3];
  7.     char *arr[3] = { "AAA" ,  "BBBB" ,  "CCCCC"  };
  8.     char arrr[3][20] = { "AAA", "BBBB", "CCCCC" };
  9.  
  10.     int num[3];
  11.     int i;
  12.  
  13.     for (i = 0; i < 3; i++)
  14.     {
  15.         scanf("%d", &num[i]);
  16.         ar[i] = (char *)malloc(num[i] * sizeof(char));
  17. //        memset(ar[i],'%', num[i]);
  18. //        printf("%c\n", ar[i][0]);
  19.     }
  20.  
  21.     for (i = 0; i < 3; i++)
  22.     {
  23.         printf("%d \n", sizeof(ar[i]));
  24.         printf("%d \n", sizeof(arr[i]));
  25.         printf("%d \n\n", sizeof(arrr[i]));
  26.     }
  27.  
  28.     for (i = 0; i < 3; i++)
  29.     {
  30.         free(ar[i]);
  31.     }
  32.  
  33. }
 
재가 작성한 코드입니다.
 
입력을 통해 num배열에 숫자를 저장하고
 
malloc을 통해서 문자열배열 ar에 필요한 만큼의 메모리를 할당하고
 
할당된 메모리 크기를 sizeof를 통해서 출력하는 프로그램인데
 
동적 메모리 할당한 *ar과 문자형 포인터배열(문자열 배열)인 *arr은 4가 출력되고(아마 포인터 크기를 반환한듯합니다.)
 
문자형 2차원 배열인 arrr만이 배열의 크기인 10을 반환합니다.
 
sizeof에 인수로 포인터를 전달했다고 4를 반환한거라면
 
배열의 이름도 포인터임에도 불구하고 sizeof에 인수로 넣을경우 왜 포인터 크기인 4가아닌 배열의 크기가 출력되는건지...
 
인터넷에서는 '배열의 이름은 포인터다.'라고 표현한건 동작이 비슷하기 때문에
 
이해하기 쉽게 그렇게 알려주는거지 실제 내용은 너무 어려워서 그냥 "똑같다"라고 표현하는 책이 많아서 그런거라는 말이 있네요...
 
 
 
즉, 엄밀히 말하자면
 
"배열의 이름은 포인터처럼 사용할 수 있지만 포인터는 아니다" 가 되는건데...
 
 
 
여기 까지 오니 머릿속으로 차곡차곡 쌓아놓은 지식들이 뭔가 위태위태 해지는 느낌이......
 
왜 출력값이 달라지는건지 쉬원하게 설명좀 해주세요 ㅠㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호