C에서 배열인데 함수 안에서 포인터로 리턴받았을 경우 함수 밖에서 사이즈를 알 수 있나요?

2019. 02. 12. 16:57

sizeof(배열)은 총 bytes 수

sizeof(포인터)는 고정값을 리턴하는걸로 나오는데요

제목과 같이 실제 배열인데 포인터로 리턴받은 변수를 sizeof 로 배열사이즈를 알 수 있는지 궁금합니다

공유하고 돈벌기 ♥︎

총 1개의 답변이 있습니다.

질문자 채택 답변
ss 개발자
void printSize(char *p) {
  int size = sizeof(p);
  printf("%d\n", size);
}

char arr[30];
char *p = arr;

printSize(p);

위 printSize 와 같은 function 안에서 포인터 p 만 가지고 p 가 참조하고 있는 arr의 size를 알 수 있냐는 말씀이신거죠?

결론만 말씀 드리면 포인터만 전달 받아서는 포인터가 참조하고 있는 배열의 크기를 알 수 있는 방법은 없습니다.

원 배열의 크기가 필요한 경우에는 아래처럼 배열 크기도 같이 전달해줘야 합니다.

void printSize(char *p, int size) {
  int i;

  for (i = 0; i < size; i++) {
    printf("%c\n", p[i]);
  }
}

char arr[30];
char *p = arr;

printSize(p, 30);

만약, 배열을 main 아닌 함수에서 만들고 main 함수에서 배열을 쓰시는 거라면, 함수 안의 로컬 변수를 리턴하는 방식이기 때문에 좋은 방식이 아닙니다. 로컬 변수는 함수 실행 끝난 후에 살아있을지 보장을 못하니까요. main에서 배열 포인터를 선언하고 함수에 인자로 넘겨서 하는 방식으로 코딩하시는 것이 좋습니다. 크기는 위에 설명드린 것처럼 같이 넘기시면 됩니다.

2019. 02. 12. 18:29
70