• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

포인터vs배열 질문있습니다

24.05.03 22:53 작성 24.05.03 22:57 수정 조회수 44

0

제가 이해한게 정확한지 궁금해서 그러는데요예를들어 배열로 char[] a = "abcef";를 만들어 줬다고하면배열은 모든 문자를 한글자씩 밀어넣는다고 하면 char이 1바이트니까 제가 만든 배열은 NULL값도 포함해서 총 6바이트가 되는게 맞는건지 궁금하고요 만약 맞다면 그러면 int타입의 배열로 선언하면 예를 들어 char[] b = {1, 3, 4}로 선언하면 int는 4바이트니까 총 NULL값까지 16바이트의 크기가 되는건가요?  

 

그리고 포인터는 32비트 혹은 64비트냐에 따라 무조건 4바이트 혹은 8바이트 고정크기인데

이유는 포인터를 이용해서 문자열을 만들면 예를들어 "Hello World"를 넣는다고하면

먼저 데이터 영역 어딘가에 Hello World의 배열이 만들어지고 그 배열 첫번째 요소인 H의 주소를 가리키는 포인터다라고 해석했는데 맞을까요??

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.05

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 대한 답변입니다.

  1. char[] a = "abcef";에 대해서 말씀하신 것처럼 char 타입이 1바이트를 차지하므로, 'a', 'b', 'c', 'e', 'f', 그리고 마지막에 추가되는 NULL 문자('\0')를 포함하여 총 6바이트가 맞습니다.

  2. int 타입의 배열에 대해서는 예로 든 char[] b = {1, 3, 4}; 의 선언은 약간의 오류가 있습니다. char[]가 아닌 int[]로 선언해야 할 것 같습니다. 예를 들어 int[] b = {1, 3, 4};로 선언한다면, int는 4바이트이므로 각각의 int 값이 4바이트를 차지합니다. 따라서 3개의 int 값이 저장되어 총 12바이트의 크기를 갖게 됩니다. NULL 값이 추가되지 않는다는 점이 char 배열과 다릅니다.

  3. 포인터에 대해서는 말씀하신 내용이 맞습니다. 포인터는 주소 값을 저장하는 변수이며, 그 크기는 시스템이 32비트인지 64비트인지에 따라 다릅니다. 32비트 시스템에서는 4바이트, 64비트 시스템에서는 8바이트를 차지합니다. 예로 든 "Hello World" 문자열의 경우, 데이터 영역에 해당 문자열이 저장되고, 문자열의 첫 번째 문자인 H를 가리키는 포인터가 생성됩니다. 이 포인터를 사용하여 문자열 전체에 접근할 수 있습니다.

님의 이해가 정확한 방향으로 가고 있습니다. 프로그래밍을 학습하는 과정에서 이러한 개념들을 정확히 이해하는 것이 중요합니다. 추가적으로 궁금한 점이 있으시다면 언제든지 질문해 주세요.