1. 문자열을 받는 두 가지 예시
이 소스 코드를 실행한다면
위와 같은 결과가 나온다.
첫 번째 결과는 sentence라는 문자열을 str이라는 배열에 집어 넣고 있기 때문에 이해할 수 있다.
두 번째 결과는 sentence는 문자열이지만 pstr는 char형을 가리키는 포인터이므로 char형 변수의 주소값이 들어가야 한다.
여기서 sentence는 특정한 주소값으로 사용되고 있음을 의심해볼 수 있다.
실제로 sentence를 출력하면
이와 같이 특정한 수가 출력됨을 알 수 있다.
2. 포인터로 문자열을 받는 것은 읽기 전용?
위와 같은 소스 코드를 돌릴 때도 pstr[0] = "M"에서 오류가 발생함을 확인할 수 있다.
즉, pstr은 읽기만 가능하고 쓰기가 불가능하단 얘기가 될 수 있다.
3. Text Segment에 저장되는 String Literal
"sentence", "Hello", "World"는 모두 문자열 리터럴(string literal)로 소스 코드 상에서 고정된 값을 말한다.
컴퓨터는 이러한 리터럴들을 따로 모아서 보관한다. 따로 보관하는 곳을 Text Segment라고 한다.
Text Segment에 "sentence"라는 문자열의 시작 주소값이 저장되며 이를 포인터로 받을 수 있게 된다.
변수와 리터럴에 관한 참고자료
https://supersumin.tistory.com/7
변수와 리터럴의 차이
1. 리터럴(Literal) 소스 코드에 직접 입력된 고정된 값이다프로그램 실행 중 변경되지 않은 상수값을 표현하는데 사용한다.즉, 사용자가 소스 코드에 입력한 값은 리터럴이 된다. 2. 변수프로그
supersumin.tistory.com
Segment 참고자료
https://supersumin.tistory.com/9
프로그램 메모리 구조
일반적으로 프로그램이 실행되면 메모리는 여러 세그먼트로 나뉜다. 다음은 각 세그먼트의 설명이다.1. 텍스트 세그먼트(Text Segment) 내용: 프로그램 코드와 상수, 리터럴 등이 저장된다.특징: 읽
supersumin.tistory.com
4. 배열에 저장된 문자열은 Stack?
그렇다면 아래의 코드를 살펴보자
"Hello"는 리터럴이라고 부르 애매하다.
왜냐하면 컴파일러에서 아래와 같이 해석하기 때문이다.
이는 str이라는 배열에 Hello라는 문자열을 복사하게 된다. 위 배열은 Text Segment가 아닌 Stack이라는 메모리 수정이 가능한 메모리에 저장되기 때문에 str 안의 문자열은 수정이 가능하다.
@요약
배열은 Stack, 포인터는 Text Segment에 String Literal을 저장하기 때문에 포인터로 저장한 문자열은 수정할 수 없다.
'학부 수업 내용 정리 > 자료구조' 카테고리의 다른 글
Array (0) | 2025.03.12 |
---|---|
Recursion (0) | 2025.03.12 |
동적할당을 왜 하는 걸까요? (0) | 2024.09.28 |
프로그램 실행 시 알아야 할 기본적인 메모리 구조 (0) | 2024.08.01 |
변수와 리터럴의 차이 (0) | 2024.07.30 |