버그 해결을 위한 모든 질문을 던져
0 votes
97 views
char* arr = "Hello World!";

위와 같이 문자열을 넣는게 가능하다는걸 알게 되었습니다.

위와 같이 초기화한 다음에

arr = "Hello World!x2";

와 같이 초기화한 문자열의 길이보다 긴 문자열을 받을 수 있는거 보니까

배열이 아닌거 같은데, 그렇다면

char arr[13] = "Hello World!";

와의 차이점을 알 수 있을까요?
asked (10 point)
재 태그 , 97 views

1 답변

+2 votes
우수 답변

char* arr : 문자열 "상수"의 주소값. 해당 값 읽기 전용.
char arr[] :  문자들을 담을수 있는 배열 (길이가 확보됨). 배열 범위 내에서 읽고쓰기 가능.

----------------------------------

char* arr1 = "Hello World!";
char* arr2[13] = "Hello World!";
char* arr3 = arr2;

일 때

arr2[2] = 'r';    // OK
arr1[2] = 'r';    // 엑세스 위반 에러
arr3[3] = 'r';    // OK (arr2를 고치므로)
-----------------------------------

char* arr1 = "Hello World!";

C언어에서는 컴파일되지만
최근의 C++ 컴파일러에서는 컴파일 오류가 발생합니다.


------ 그 외 -------

char* arr1 = "Hello World!";
char* arr2[13] = "Hello World!";
char* arr3 = arr2;

일 때

sizeof(arr1), sizeof(arr2), sizeof(arr3) 의 값도 한번 확인해보시면 
공부에 도움 되실듯 합니다!
 

answered (273 point)
선택됨
답변 감사합니다.

그렇다면

char* arr1 = "Hello World!"

이렇게 선언하게 되면 다른 배열과 같이 연속적인 형태로

메모리 stack영역 혹은 data영역에 올라가는게 맞나요?

결론부터 말하자면 메모리에 올라가는건 맞습니다.

제가 표현이 좀 서툴러서 추가로 설명하다가 오해의 소지가 더 깊어질 수 있으므로(...)

다음 링크 설명이 잘 나와있으니 보시면 될 듯 합니다!

https://blog.naver.com/tipsware/221018307213

 

 

답변 감사합니다!

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

239 질문
367 answers
376 댓글
470 users