inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

char 포인터 관련 질문

해결된 질문

131

luki

작성한 질문수 14

1

image.png

안녕하세요.

4.4 strlen 강의에서,

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

c

답변 2

2

Soobak

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

 

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

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

따라서,

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

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

 

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

1

luki

답변 해주셔서 감사합니다

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

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

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

2

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를 이용하여 자료형의 크기를 측정할 때 발생할 수 있는 혼동에 대해 설명합니다.

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

Export template 안됨

1

8

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

52

3

main 함수에서 왜 int만 선언이 되는걸까요

1

56

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

54

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

49

1

프로토타입과 함수간의 인자 불일치

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

137

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

60

2

getchar(), putchar()

1

93

3

강의자리ㅛ

1

79

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

112

2

소스파일안에 여러 파일

1

75

2

F5와 F7의 차이

1

76

2

c = TWO * (a+b); 에서 a와 b는?

1

58

2

; 세미콜론을 붙이는 기준에 문의

1

68

1

Step over 기능 문의

1

53

2

2.6 강의 따옴표 출력 규칙 문의

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

64

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

53

2