인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

luki님의 프로필 이미지

작성한 질문수

홍정모의 따라하며 배우는 C언어

char 포인터 관련 질문

해결된 질문

작성

·

59

1

image.png

안녕하세요.

4.4 strlen 강의에서,

char 자료형은 크기가 1바이트. 포인터는 4바이트라고 하셨는데, 자료형보다 큰 값을 자료형이 담아내도 되는건가요? 오버플로 같은 문제는 안일어날까요?

답변 2

2

Soobak님의 프로필 이미지

안녕하세요? 질문&답변 도우미 Soobak 입니다.

 

포인터를 처음 접하실 때 혼동하기 쉬운 부분에 대한 질문이시네요.
일반적인 을 담는 자료형과 주소 를 담는 포인터 자료형 사이에서 혼동이 있으신 것 같습니다.

char 자료형은 말씀해주신 것 처럼, 1 바이트 크기를 가지며, 문자 값을 저장합니다.
하지만, char* (문자 포인터) 자료형은 실제 데이터가 저장된 메모리 주소 를 가리키는 주소값을 저장하는 변수 입니다. (운영체제와 컴파일러 환경에 따라 말씀해주신 것처럼 4바이트, 혹은 8 바이트의 크기를 가집니다.)

따라서,

char c = 'A'; // 1바이트
char *p = &c; // p는 c의 '주소' 를 저장 (4바이트 또는 8바이트)

: 여기서 p 가 담고 있는 값은 c 의 메모리 주소이며, 포인터 변수는 값의 실제 크기가 아닌, 메모리 주소의 크기를 가지고 있기 때문에 오버플로우와 같은 문제가 발생하지 않습니다.

 

이해가 어려우시거나 궁금하신 점 있으시면 편히 댓글 달아주세요.

luki님의 프로필 이미지
luki
질문자

답변 해주셔서 감사합니다

char* (문자 포인터)라고 하셨는데,

그럼 여기서 char *p = &c; char는 , char* 라서 char 같은 자료형이 아닌, 주소값을 저장하는 변수이며,

char 에 *가 생략된거라 원래는 char* 라 봐야하는건가요?

Soobak님의 프로필 이미지

안녕하세요? 질문&답변 도우미 Soobak 입니다.

 

char *p 의 표현 또한, 변수 p 는 "문자(char)를 가리키는 포인터" 라는 의미입니다.
p 바로 이전에 * (asterisk) 가 삽입되어 있습니다.

 

이와 관련하여, 사실 C언어에서는 자료형과 * 사이에 공백을 자유롭게 넣어 포인터를 선언할 수 있습니다.

char *p;
char* p;
char * p;

: 모두 같은 표현입니다. 하지만, 보통 char *p; 형태를 선호합니다.

이러한 이유와 관련돼서는 따배씨 강의 중 교수님께서 설명해주시는데요.

변수를 선언 할 때는 다음과 같이 한 줄에 같은 자료형의 변수 여러 개를 , 로 구분하여 선언할 수 있습니다.

char* p1, p2;

: 이 때, 위와 같이 작성하면 앞에 작성된 p1 만 '포인터' 이고 p2 는 일반 char 변수가 됩니다.

char *p1, *p2;

: 따라서, 혼동을 피하기 위해 보통 위와 같이 작성합니다.

 

즉, char *p; 에서 * 는 생략된 것이 아니라, 공백으로 구분된 것이며,
char* p; 형식보다 char *p; 형식이 더 선호되는 이유는, 여러개의 포인터 변수를 선언할 때 혼동을 줄이기 위함입니다.

0

인프런 AI 인턴님의 프로필 이미지

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

질문해주신 내용을 보고 char 자료형과 포인터의 차이에 관한 혼란이 있으신 것 같습니다. char 포인터는 그 자체로 4바이트 또는 8바이트(시스템에 따라 다름)의 메모리 크기를 가지며, 이는 char 타입의 데이터를 가리키는 주소를 저장하는 데 사용됩니다. 따라서 포인터가 가리키는 데이터의 실제 크기와 관련이 없습니다.

char 포인터가 4바이트라면, 이는 메모리 주소의 크기를 의미하며, 포인터 자체가 가리키는 데이터의 크기와는 관련이 없습니다. 따라서 char 데이터(1바이트 크기)를 가리키는 데 전혀 문제가 없습니다. 오버플로는 포인터가 아닌 실질적으로 메모리를 관리할 때 발생할 수 있는 문제로, 관리하지 않은 동적 할당 메모리를 사용할 때 주의해야 합니다.

유사한 질문에 대한 논의가 있는 게시물을 찾아보았습니다:

  • 크기에 대해!
    여기에서는 sizeof를 이용하여 자료형의 크기를 측정할 때 발생할 수 있는 혼동에 대해 설명합니다.

질문이 충분히 해결되지 않은 경우, 상세한 내용을 기반으로 다시 질문을 해주시면 감사하겠습니다. 저희 답변이 불충분할 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

luki님의 프로필 이미지

작성한 질문수

질문하기